如何在 BigQuery 中获取给定存储库的 GitHub 星总数?

Ste*_*ren 2 github google-bigquery

我的目标是随着时间的推移跟踪我的 BigQuery 存储库的受欢迎程度。

我想使用公开可用的 BigQuery 数据集,例如GitHub ArchiveGitHub 数据集

GitHub 数据集sample_repos不包含星数的快照:

SELECT
  watch_count
FROM
  [bigquery-public-data:github_repos.sample_repos]
WHERE
  repo_name == 'angular/angular'
Run Code Online (Sandbox Code Playgroud)

返回 5318。

GitHub Archive 是事件的时间线。我可以尝试将它们全部相加,但这些数字与 GitHub UI 中的数字不匹配。我猜是因为它不计算 unstar 动作。这是我使用的查询:

SELECT
  COUNT(*)
FROM
  [githubarchive:year.2011],
  [githubarchive:year.2012],
  [githubarchive:year.2013],
  [githubarchive:year.2014],
  [githubarchive:year.2015],
  [githubarchive:year.2016],
  TABLE_DATE_RANGE([githubarchive:day.], TIMESTAMP('2017-01-01'), TIMESTAMP('2017-03-30') )
WHERE
  repo.name == 'angular/angular'
  AND type = "WatchEvent"
Run Code Online (Sandbox Code Playgroud)

返回 24144

实际值为 21,921

Fel*_*ffa 6

#standardSQL
SELECT 
  COUNT(*) naive_count,
  COUNT(DISTINCT actor.id) unique_by_actor_id, 
  COUNT(DISTINCT actor.login) unique_by_actor_login 
FROM `githubarchive.month.*` 
WHERE repo.name = 'angular/angular'
AND type = "WatchEvent"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

天真计数:有些人明星和取消明星,然后再次明星。这会创建重复的 WatchEvent。

演员 id 计数的唯一性:每个人只能出演一次。我们可以计算这些(但我们不知道它们是否未加星标,因此总计数将低于此值)。

演员登录的唯一性:某些历史月份缺少“actor.id”字段。我们可以改为查看“actor.login”字段(但有些人更改了他们的登录名)。

或者,感谢 GHTorrent 项目:

#standardSQL
SELECT COUNT(*) stars
FROM `ghtorrent-bq.ght_2017_01_19.watchers` a
JOIN `ghtorrent-bq.ght_2017_01_19.projects` b
ON a.repo_id=b.id
WHERE url = 'https://api.github.com/repos/angular/angular'
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

20567,截至 2017/01/19。


有关的:

  • 当项目更改其名称时会发生什么?

/sf/answers/3005491471/

  • 如何在更新之前获取更新的 GHtorrent 数据?

/sf/answers/3005496371/