我正在尝试通过Big Query(doc here)在Github存档中获取各种Github回购指标。但是,当我尝试计算叉子的数量时,我得到的数量与Github UI中指定的叉子的数量非常不同。例如,当我运行此sql脚本时:
SELECT repo.url,repo.name , COUNT(*) fork_count,
FROM [githubarchive:year.2011],
[githubarchive:year.2012],
[githubarchive:year.2013],
[githubarchive:year.2014],
[githubarchive:year.2015],
[githubarchive:year.2016],
[githubarchive:year.2017],
[githubarchive:year.2018],
[githubarchive:month.201901]
WHERE type='ForkEvent'
and repo.url like 'https://github.com/python/cpython'
GROUP BY 1,2
我得到以下结果:
Row repo_url repo_name fork_count
1 https://github.com/python/cpython cpython 177
但是,当我转到URL'https://github.com/python/cpython'时,我看到有8198个分支。这种差异的原因是什么?
编辑:
但是,即使有多个URL,这个数字也不是与UI完全匹配的,这次比UI的数字大得多。有没有办法获得完全匹配?
答案 0 :(得分:1)
您要查询什么?请注意,根据输入的回购ID,名称或网址,您将获得不同的结果:
#standardSQL
SELECT repo.name, repo.id, repo.url, COUNT(*) c
FROM `githubarchive.month.201*`
WHERE type='ForkEvent'
AND (
repo.id = 81598961
OR repo.name='python/cpython'
OR repo.url like 'https://github.com/python/cpython'
)
GROUP BY 1,2,3
如果您想知道“何时?”:
#standardSQL
SELECT repo.name, repo.id, repo.url, COUNT(*) c
, MIN(DATE(created_at)) since, MAX(DATE(created_at)) until
FROM `githubarchive.month.201*`
WHERE type='ForkEvent'
AND (
repo.id = 81598961
OR repo.name='python/cpython'
OR repo.url like 'https://github.com/python/cpython'
)
GROUP BY 1,2,3
ORDER BY since
编辑:
GitHub仅为每个用户列出一个分支-因此,如果要删除重复项,请执行COUNT(DISTINCT actor.id),将其降低到约9k。