10年戦えるデータ分析入門 を読んだ

今更だけど尊敬している先輩が書いた本を読んだ。よかった。

内容はそんな難しくなくて、ある程度知っていることも多かった。今までは雰囲気で分析SQLを書いていたので group by とウィンドウ関数に苦手意識があったがそれが減ったのと、今後分析するときにこの本に還ってくれば良いという安心感を得られた。
セルフジョインやクロスジョイン、スカラーサブクエリーなどは記憶になかったので知れてよかった。

私は分析基盤を構築することはあまりないかなあと思っているので、後半の構築や運用の話は流し読みした。でもその中でジョブ管理システムが出てきて、新卒の時にWindows98みたいな見た目のジョブ管理システム(たぶんJP1だったと思う)を使っていたことや、泣きながらSybaseのストアドプロシージャを書いていたことを思い出し懐かしい気持ちになった。

以下雑メモ:

  • ランダムサンプリング
    • where random() < 0.001 みたいにしてデータからランダムに何件か取得する
  • group by の絞り込みは having
  • interval xx時間前後
  • extract 年や月、日を取り出せる
  • date_trunc 2014-09-28 12:34:562014-09-01 00:00:00 みたいにできる
  • セルフジョイン
    • 自分自身とジョインする
    • 1年前のデータとジョインして伸び率を出すなど
  • クロスジョイン
    • 全ての組み合わせを生成する
    • 縦持ち横持ちテーブルの変換など
  • スカラーサブクエリー
    • select や where で利用できるサブクエリ
  • ウィンドウ関数
    • group by で作ったグループの中を皆がなら集約をせずに計算できる
      • 普通に group by すると結果が1行になってしまうが、ウィンドウ関数を利用するとその結果を元の行に追加できる
    • rank で順位を出せる
    • rank は同じ値では重複してしまうので、row_number でソート順に順位をつけれる
    • sum は over をつけるとウィンドウ関数としても動く
    • ウィンドウフレームは計算対象範囲を狭めることができる
      • rows between 前 and 後
    • ntile デシル分析ができる
    • avg移動平均計算ができる
  • view はテーブルのように見えるが使われるたびに select を実行する create view hoge as select ...
    • with でもいけそう?
  • case で条件分岐 case 式 X when 式1 then 結果1 ... else 結果E end
  • PostgreSQL には json_to_record 関数があり json を変換できる
  • セッション分析
    • lag ウィンドウ関数を使って前の行の値を取ることができる
  • 分析SQLにおいてはSQLのindexはほぼ効果がないが、論理パーティションという日や月毎に切ったテーブルを用意しておくのは効果的