1

github アーカイブ ( http://www.githubarchive.org/ ) データで Google BigQuery を使用して、最新のイベント時のリポジトリの統計を取得しようとしています。ウォッチャー。私はこれがたくさんあることを認識していますが、1 つのクエリでそれを取得することに本当に近づいているように感じます。

これは私が今持っているクエリです:

SELECT repository_name, repository_owner, repository_organization, repository_size,  repository_watchers as watchers, repository_forks as forks, repository_language, MAX(PARSE_UTC_USEC(created_at)) as time
FROM [githubarchive:github.timeline]
GROUP EACH BY repository_name, repository_owner, repository_organization, repository_size, watchers, forks, repository_language
ORDER BY watchers DESC, time DESC
LIMIT 1000

唯一の問題は、監視されている最高のリポジトリ (twitter ブートストラップ) からのすべてのイベントを取得することです。

結果:

Row repository_name repository_owner    repository_organization repository_size watchers    forks   repository_language time     
1   bootstrap           twbs                    twbs                   83875      61191     21602   JavaScript          1384991582000000     
2   bootstrap           twbs                    twbs                   83875      61190     21602   JavaScript          1384991337000000     
3   bootstrap           twbs                    twbs                   83875      61190     21603   JavaScript          1384989683000000

...

これを取得して、repository_name の単一の結果 (最新、別名 Max(time)) を返すにはどうすればよいですか?

私はもう試した:

SELECT repository_name, repository_owner, repository_organization, repository_size, repository_watchers as watchers, repository_forks as forks, repository_language, MAX(PARSE_UTC_USEC(created_at)) as time
FROM [githubarchive:github.timeline]
WHERE PARSE_UTC_USEC(created_at) IN (SELECT MAX(PARSE_UTC_USEC(created_at)) FROM [githubarchive:github.timeline])
GROUP EACH BY repository_name, repository_owner, repository_organization, repository_size, watchers, forks, repository_language
ORDER BY watchers DESC, time DESC
LIMIT 1000

それが機能するかどうかはわかりませんが、エラーメッセージが表示されるので問題ありません:

Error: Join attribute is not defined: PARSE_UTC_USEC

どんな助けでも素晴らしいでしょう、ありがとう。

4

1 に答える 1

4

このクエリの問題点の 1 つは、2 つの操作が同時に発生すると、結果が混乱する可能性があることです。リポジトリ名でグループ化して各リポジトリの最大コミット時間を取得し、それに対して結合して必要な他のフィールドを取得すると、必要なものを取得できます。例えば:

SELECT
  a.repository_name as name,
  a.repository_owner as owner,
  a.repository_organization as organization,
  a.repository_size as size,
  a.repository_watchers AS watchers,
  a.repository_forks AS forks,
  a.repository_language as language,
  PARSE_UTC_USEC(created_at) AS time  
FROM [githubarchive:github.timeline] a
JOIN EACH
  (
     SELECT MAX(created_at) as max_created, repository_name 
     FROM [githubarchive:github.timeline]
     GROUP EACH BY repository_name
  ) b
  ON 
  b.max_created = a.created_at and
  b.repository_name = a.repository_name
ORDER BY watchers desc
LIMIT 1000  
于 2013-11-21T02:13:02.677 に答える