LoginSignup
5
2

More than 5 years have passed since last update.

時刻かつURLごとのアクセス数(ヒストグラム形式)を一気に集計するSQL

Posted at

BigQueryとかでログっぽいものを集計する時のアイデアメモ。
こういうのは名前が決まってると会話しやすいんだけど、なんか必殺技名ないものかしら。

元データのイメージ

以下のようなテーブルにログ的なデータが入ってたとする。

logs

created path message
2017-01-01 00:00:00.0123 /foo なんか適当な付加情報
2017-01-01 00:00:01.1234 /baa なんか適当な付加情報
2017-01-01 00:00:02.0123 /baa なんか適当な付加情報
...

これを時刻ごとに区切って、◯時台だと/fooに何回、/baaに何回、アクセスがあったよーみたいなのを計算したい。

どう書きますか?

私の回答

要件によるんだけど、pathのパターンが数種類だけで決まっているなら、すごく簡単な1個のSQLで作れる。
ここではBigQueryの関数を使っているけれど、時刻の関数はどのRDBMSにもついてるだろうし、たぶん似たような発想で作れると思う。

  SELECT UTC_USEC_TO_HOUR(created) AS period
       , SUM(path = '/foo') AS foo
       , SUM(path = '/baa') AS baa
       , SUM(path = '/moo') AS moo
    FROM logs
   WHERE created BETWEEN '2017-01-01' AND '2017-01-02'
GROUP BY period
ORDER BY period

こういう感じのデータが取れるはず。

hour foo baa moo
2017-01-01 00 112 2523 321
2017-01-01 01 90 2121 123
...

ポイントはアクセス数を出すときにCOUNTじゃなくてSUMを使うこと。trueは1としてカウントされ、falseなら0でカウント対象にならない。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2