のデータは[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
データ ポイントが表示されます。