1

我想在 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”
  • 它不返回主 Rails 存储库:https ://github.com/rails/rails
  • Github 搜索报告 147149 个名为“rails”的存储库,查询仅返回 476 个存储库

我的查询在某种程度上是错误的,为什么它不返回 PushEvents ?关于 github 存档数据集还有其他技巧吗?

4

1 回答 1

2

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

您可以根据使用的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 个 repos,但如果您删除该部分,您将拥有更多。

以同样的方式,您还可以利用来自每日和每月事件的数据。这些在单独的表中,可以与表通配符函数一起使用。

于 2015-01-26T14:26:21.280 回答