Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 跟踪GitHub上前100个存储库的增长情况?_Sql_Join_Github_Google Bigquery_Github Archive - Fatal编程技术网

Sql 跟踪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

我试图追踪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_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
,我们有更新的数据。