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 年より前のデータが含まれていないことはわかっていますが、最近アクティブなリポジトリに関する情報が含まれているはずです

このクエリの結果がわかりません:

  • 常に「PushEvent」よりも古いタイプ「CreateEvent」のイベントのみを返します。
  • メインの Rails リポジトリは返されません: https://github.com/rails/rails
  • Github 検索では、「rails」という名前の 147149 個のリポジトリが報告され、クエリでは 476 個のリポジトリしか返されません

私のクエリは何らかの形で false ですか? PushEvents を返さないのはなぜですか? github アーカイブ データセットに関する別のトリックはありますか?

4

1 に答える 1

2

行の最新バージョンを取得する場合は、ウィンドウ関数を使用する必要があります。

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 のリポジトリしか返されませんが、その部分を削除すると、さらに多くのリポジトリが返されます。

同じスタイルで、日ごとおよび月ごとのイベントからのデータも活用できます。これらは別のテーブルにあり、テーブルのワイルドカード関数で使用できます。

于 2015-01-26T14:26:21.280 に答える