为什么Big Query上的Github存档中的派生数与UI不匹配?

时间:2019-01-10 00:43:29

标签: github google-bigquery github-api github-archive

我正在尝试通过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个分支。这种差异的原因是什么?

编辑:

Felipe在下面指出,同一仓库可能有多个URL。 Felipe's output

但是,即使有多个URL,这个数字也不是与UI完全匹配的,这次比UI的数字大得多。有没有办法获得完全匹配?

1 个答案:

答案 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

enter image description here

如果您想知道“何时?”:

#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

enter image description here

编辑:

GitHub仅为每个用户列出一个分支-因此,如果要删除重复项,请执行COUNT(DISTINCT actor.id),将其降低到约9k。