从Github Archive获取最新的存储库信息

时间:2015-01-26 09:55:57

标签: github google-bigquery github-archive

我想在github存档时间轴数据集上使用Google Big Query检索有关存储库的最新信息。

我尝试加入max(created_at),但是我的信息非常不完整。以下是rails repo的查询:

SELECT *
FROM [githubarchive:github.timeline] a
JOIN EACH
  (
     SELECT MAX(created_at) as max_created, repository_url
     FROM [githubarchive:github.timeline]
     GROUP EACH BY repository_url
  ) b
  ON 
  b.max_created = a.created_at and
  b.repository_url = a.repository_url
WHERE payload_ref_type="repository" AND a.repository_name = 'rails'

我知道此数据集在2011年之前不包含数据,但它应包含有关最近活动存储库的信息

我不明白这个查询的结果:

  • 它只返回“CreateEvent”类型的事件,它们总是比“PushEvent”
  • 更旧
  • 它不会返回主轨道存储库:https://github.com/rails/rails
  • Github搜索报告147149名称为“rails”的存储库,查询仅返回476个存储库

我的查询在某种程度上是假的,为什么不返回PushEvents? 还有关于github存档数据集的另一个技巧吗?

1 个答案:

答案 0 :(得分:2)

如果要检索行的最新版本,则需要使用Window functions

您可以使用。{/ p>根据created_at时间戳列获取修改的顺序

SELECT *
FROM
  (SELECT a.*,
          row_number() over (partition BY repository_url
                             ORDER BY created_at DESC) AS seq_num
   FROM [githubarchive:github.timeline] a
   WHERE payload_ref_type="repository"
     AND a.repository_name = 'rails') d
WHERE seq_num=1 LIMIT 10

seq_num=1表示它将从该特定分区中获取第一个条目,因为我们命令降序将是最近的条目。

在查询中保留payload_ref_type="repository只会返回1050个回购,但如果删除该部分,则会有更多。

在相同的风格中,您还可以利用日期和月度活动中的数据。它们位于单独的表中,可以与表通配符函数一起使用。