Sql 跟踪GitHub上前100个存储库的增长情况?
我试图追踪GitHub上前100个存储库的增长情况。我有以下疑问:Sql 跟踪GitHub上前100个存储库的增长情况?,sql,join,github,google-bigquery,github-archive,Sql,Join,Github,Google Bigquery,Github Archive,我试图追踪GitHub上前100个存储库的增长情况。我有以下疑问: SELECT MAX(repository_forks) as forks, repository_url FROM [publicdata:samples.github_timeline] WHERE (created_at CONTAINS "2012-04-01") GROUP BY repository_url ORDER BY forks DESC LIMIT 100 SELECT repository_na
SELECT MAX(repository_forks) as forks, repository_url
FROM [publicdata:samples.github_timeline]
WHERE (created_at CONTAINS "2012-04-01")
GROUP BY repository_url
ORDER BY forks DESC LIMIT 100
SELECT repository_name, created_at as month,
SUM(repository_forks) as forks
FROM [githubarchive:github.timeline]
WHERE (repository_name = "rubinius")
GROUP BY repository_name, month
ORDER BY month DESC;
这让我在2012年4月1日获得了福克斯公司100个最大的存储库。然后我想跟踪每个存储库每个月的fork数量是如何增长的
因此,我构建了以下查询:
SELECT MAX(repository_forks) as forks, repository_url
FROM [publicdata:samples.github_timeline]
WHERE (created_at CONTAINS "2012-04-01")
GROUP BY repository_url
ORDER BY forks DESC LIMIT 100
SELECT repository_name, created_at as month,
SUM(repository_forks) as forks
FROM [githubarchive:github.timeline]
WHERE (repository_name = "rubinius")
GROUP BY repository_name, month
ORDER BY month DESC;
这种方式给了我想要的,但不完全是。相反,我需要查询:
- 为每个月(每次回购)的债券总数提供一个数字
- 搜索第一个查询中标识的100个存储库
如何实现这一点?在
[publicdata:samples.github\u timeline]
中的数据看起来像是每个存储库在不同时间戳上的快照。如果是这样的话,为了计算每月每次回购的叉数变化,我认为您不应该做SUM(repository\u forks)
。相反,您希望获得每个月的第一个快照和最后一个快照,并进行减去计算以获得增量
结果来自以下查询:
选择存储库名称、创建位置、存储库分叉
来自[publicdata:samples.github_timeline]
其中存储库_name='Bukkit'
由您在创建的订单;
但是,我不明白为什么在2012-03-11 08:30:21
,来自Bukkit
的存储库分叉数为零。可能是数据错误?如果是数据错误,我会将它们视为异常值。对其设置一些阈值可能能够删除这些异常值。请注意我设置的阈值:其中repository_forks>10
,以便跳过坏数据
选择top100.repository\u名称,
substr(在0,7月创建),
最大值(存储库叉)-最小值(存储库叉)每月增加,
min(存储库分叉)每月开始时间:,
max(存储库\分叉)每月\结束\带有
来自[githubarchive:github.timeline]时间线
参加
(选择存储库\名称,MAX(存储库\分叉)作为分叉)
来自[githubarchive:github.timeline]
其中(创建时包含“2012-04-01”)
按存储库名称分组
按货叉订购描述限制100)top100
在timeline.repository\u name=top100.repository\u name上
其中存储库_分叉>10
按top100.U名称、月份分组
按top100.U名称、月份排序;
结果如下:
如果我错了,并且存储库\u分叉的数量已经发生了变化,您可以继续对存储库\u分叉进行求和,就像您所做的那样。那就更容易了:
SELECT repository_name, substr(created_at,0,7) as month, SUM(repository_forks) as forks
FROM [publicdata:samples.github_timeline] timeline
JOIN
(SELECT repository_url , MAX(repository_forks) as forks
FROM [publicdata:samples.github_timeline]
WHERE (created_at CONTAINS "2012-04-01")
GROUP BY repository_url
ORDER BY forks DESC LIMIT 100) top100
on timeline.repository_url = top100.repository_url
GROUP BY repository_name, month
ORDER BY repository_name, month DESC;
更新:
对。我将数据集更改为指向githubarchive:github.timeline,然后我的数据将保留到2012年12月。相应的sql
和结果被更新。但是数据质量不好,仍然看到很多异常数据点 太棒了!然而,这似乎只给出了2012年5月之前的数据,但应该有数据一直可用到2012年11月?是的,你是对的。如果您改为查询[githubarchive:github.timeline]
,数据将正确显示(即直到11月12日)。对,如果我指向githubarchive
,我们有更新的数据。