3

GitHubのトップ100リポジトリの成長を追跡しようとしています。私は次のクエリを持っています:

SELECT MAX(repository_forks) as forks, repository_url 
FROM [publicdata:samples.github_timeline] 
WHERE (created_at CONTAINS "2012-04-01") 
GROUP BY repository_url 
ORDER BY forks DESC LIMIT 100

これにより、2012年4月1日のフォークによる最大のリポジトリ100が得られます。次に、リポジトリごとに毎月フォークの数がどのように増加するかを追跡したいと思います。

したがって、次のクエリを作成しました。

SELECT repository_name, created_at as month,
SUM(repository_forks) as forks
FROM [githubarchive:github.timeline]
WHERE (repository_name = "rubinius")
GROUP BY repository_name, month
ORDER BY month DESC;

この種の私は私が欲しいものを与えてくれますが、完全ではありません。代わりに、次のクエリが必要です。

  • 各月のフォークの総数(レポごと)に単一の数値を指定します
  • 最初のクエリで識別された100個のリポジトリを検索します

どうすればこれを達成できますか?

4

1 に答える 1

2

のデータは[publicdata:samples.github_timeline]、異なるタイムスタンプでのすべてのリポジトリのスナップショットのように見えます。その場合、1 か月あたりのレポごとのフォーク数の変化を計算するには、 を実行する必要はないと思いますSUM(repository_forks)。代わりに、毎月の最初のスナップショットと最後のスナップショットminusを取得し、計算を行ってdelta.

結果は次のクエリからのものです。

select repository_name, created_at, repository_forks  
from [publicdata:samples.github_timeline]
where repository_name='Bukkit'
order by created_at;

ここに画像の説明を入力

2012-03-11 08:30:21ただし、 で、からの repository_forks の数Bukkitがゼロである理由がわかりません。データエラーかも?データエラーの場合は外れ値として扱います。それにいくつかのしきい値を設定すると、それらの外れ値を削除できる場合があります。設定したしきい値に注意してくださいwhere repository_forks > 10。不良データをスキップするためです。

SELECT top100.repository_name, 
  substr(created_at, 0, 7) month, 
  max(repository_forks)-min(repository_forks) monthly_increase, 
  min(repository_forks) monthly_begin_at, 
  max(repository_forks) monthly_end_with 
FROM [githubarchive:github.timeline] timeline
JOIN
(SELECT repository_name , MAX(repository_forks) as forks 
FROM [githubarchive:github.timeline] 
WHERE (created_at CONTAINS "2012-04-01") 
GROUP BY repository_name 
ORDER BY forks DESC LIMIT 100) top100
on timeline.repository_name = top100.repository_name
where repository_forks > 10
GROUP BY top100.repository_name, month
ORDER BY top100.repository_name, month;

結果は次のようになります。

ここに画像の説明を入力

私が間違っていて、repository_forks の数が既に変更されている場合は、先に進んで、repository_forks の合計を実行できます。次に、実際には簡単です。

SELECT repository_name, substr(created_at,0,7) as month, SUM(repository_forks) as forks
FROM [publicdata:samples.github_timeline] timeline
JOIN
(SELECT repository_url , MAX(repository_forks) as forks 
FROM [publicdata:samples.github_timeline] 
WHERE (created_at CONTAINS "2012-04-01") 
GROUP BY repository_url 
ORDER BY forks DESC LIMIT 100) top100
on timeline.repository_url = top100.repository_url
GROUP BY repository_name, month
ORDER BY repository_name, month DESC;

ここに画像の説明を入力

アップデート:

はい。を指すようにデータセットを変更したところgithubarchive:github.timeline、2012 年 12 月までのデータがありました。対応するsql結果が更新されました。しかし、データの品質は良くありません。まだ多くのoutlierデータ ポイントが表示されます。

于 2012-12-14T20:24:47.093 に答える