Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ディメンショナルモデリングのすすめ

 ディメンショナルモデリングのすすめ

Developer Summit 2018 Summer

Ojima Hikaru

July 27, 2018
Tweet

More Decks by Ojima Hikaru

Other Decks in Technology

Transcript

  1. ©XFLAG
    ディメンショナル
    モデリングの勧め

    View Slide

  2. ©XFLAG
    About Me
    生島 光
    株式会社ミクシィ XFLAG スタジオ
    解析グループ
    データ分析基盤の開発・運用
    GitHub: ojima-h
    Twitter: @ojima_h
    Facebook: hikaru.ojima

    View Slide

  3. ©XFLAG
    © XFLAG

    View Slide

  4. ©XFLAG
    今日話すこと
    使いやすいデータウェアハウス
    を手に入れるために
    ディメンショナル・モデリング
    を取り入れてみたお話

    View Slide

  5. ©XFLAG
    Why Dimensional
    Modeling?

    View Slide

  6. ©XFLAG
    BEFORE
    DB
    App Redshift
    APIログ
    抽出
    そのまま
    分析チーム
    依頼
    作業待ち

    View Slide

  7. ©XFLAG
    BEFORE
    DB
    App Redshift
    APIログ
    抽出
    そのまま
    分析チーム
    Zeppelin

    View Slide

  8. ©XFLAG
    ステージのクリア数を数え
    たいんだけど それなら striker_stages
    っていうテーブルの state
    が 2 になってる行を数え
    ればいいですよ
    なにそれ意味わかんない
    state の詳しい説明は
    サーバーの仕様書に書い
    てありますよ

    View Slide

  9. ©XFLAG
    PROBLEM
    ● 仕様書を読まないと分析できない

    View Slide

  10. ©XFLAG
    ステージのカテゴリごとの
    プレイ数を数えたいんだ
    けど
    それなら stage_flag って
    いうカラムの
    1ビット目を見たらわかり
    ますよ
    なにそれ意味わかんない
    詳しいことは
    サーバーのコード読めば
    わかるんですけどね

    View Slide

  11. ©XFLAG
    PROBLEM
    ● 仕様書を読まないと分析できない
    ● コードを読まないと分析できない

    View Slide

  12. ©XFLAG
    マルチプレイ数を数えたい
    んだけど
    それなら striker_stages
    テーブルを使えばいい
    ですね。
    このテーブルは自己参
    照テーブルになっている
    のでこのカラムで
    Group By して自分自身
    に結合クァwせdrftgyふ
    じこlp;
    ・・・

    View Slide

  13. ©XFLAG
    PROBLEM
    ● 仕様書を読まないと分析できない
    ● コードを読まないと分析できない
    ● 複雑なテーブル構造

    View Slide

  14. ©XFLAG
    キャンペーン施策のROI
    の算出に必要な値が欲し

    結構大変そうなので、ク
    エリのテンプレート作って
    後で調整できるようにして
    おきますね

    View Slide

  15. ©XFLAG
    300行くらいの SQL

    View Slide

  16. ©XFLAG
    PROBLEM
    ● 仕様書を読まないと分析できない
    ● コードを読まないと分析できない
    ● 複雑なテーブル構造
    ● 長すぎる SQL

    View Slide

  17. ©XFLAG
    そうだ!
    サマリテーブルを作ろう!

    View Slide

  18. ©XFLAG
    〇〇っていう分析がしたい
    わかりましたサマリテーブ
    ル作ります
    △△っていう分析がしたい
    この前作ったサマリテー
    ブルは使えなさそうです
    ね。
    わかりましたサマリテーブ
    ル作ります
    〜〜っていう分析がしたい
    この前作ったサマリテーブ
    ルは使えな(以下略

    View Slide

  19. ©XFLAG
    PROBLEM
    ● 仕様書を読まないと分析できない
    ● コードを読まないと分析できない
    ● 複雑なテーブル構造
    ● 長すぎる SQL
    ● 乱立する謎のサマリデータ

    View Slide

  20. ©XFLAG
    BI ツールは
    助けてくれない

    View Slide

  21. ©XFLAG
    PROBLEM
    ● 仕様書を読まないと分析できない
    ● コードを読まないと分析できない
    ● 長すぎる SQL
    ● 複雑なテーブル構造
    ● 乱立する謎のサマリデータ
    Dimensional
    Modeling が
    解決してくれるかも

    View Slide

  22. ©XFLAG
    Introduction to
    Dimensional Modeling

    View Slide

  23. ©XFLAG
    データ分析の流れ
    ETL
    整形
    ロード
    要件定義
    目的
    分析手法
    ゴール
    データ収集
    サーバーログ
    DB
    分析
    Σ
    自動化
    Data Warehouse
    Data Lake

    View Slide

  24. ©XFLAG
    Data Warehouse
    ○ すぐに分析に取りかかれるデータ
    ○ どんな分析にも使える柔軟性
    業務用データベースとは求められるも
    のが違う
    (e.g. 正規化 )

    View Slide

  25. ©XFLAG
    Dimensional
    Modeling
    Data Warehouse の要件に合わせたテーブル設計

    View Slide

  26. ©XFLAG
    Dimensional Modeling is...
    ○ Ralph Kimball さんが
    20年以上前に提唱した
    DWH の設計手法

    View Slide

  27. ©XFLAG
    FACT
    DIMENSIONS
    DIMENSIONS
    DIMENSIONS
    DIMENSIONS
    イベント
    状態
    e.g. ゲームのプレイログ
    FACTに対する
    説明
    e.g プレイした
    ステージに関する情報
    DIMENSIONS
    Star Schema

    View Slide

  28. ©XFLAG
    現実世界
    FACT
    DIMENSIONS
    DIMENSIONS
    DIMENSIONS
    DIMENSIONS
    Dimensional Modeling

    View Slide

  29. ©XFLAG
    設計の手順

    View Slide

  30. ©XFLAG
    1. ビジネスプロセスを選ぶ
    2. 粒度を決める
    3. Dimensionテーブルを決める
    4. Factテーブルを決める
    4 Steps

    View Slide

  31. ©XFLAG
    1. ビジネスプロセスを選ぶ
    2. 粒度を決める
    3. Dimensionテーブルを決める
    4. Factテーブルを決める
    4 Steps

    View Slide

  32. ©XFLAG
    ビジネスプロセス
    = お客さんに提供しているサービス・機能(仮)
    例)「ゲームをプレイする」
    ○ ビジネスプロセスの内容を言語化
    ○ 使えるデータを確認

    View Slide

  33. ©XFLAG
    1. ビジネスプロセスを選ぶ
    2. 粒度を決める
    3. Dimensionテーブルを決める
    4. Factテーブルを決める
    4 Steps

    View Slide

  34. ©XFLAG
    粒度
    対象のビジネスプロセスをどこまで詳細
    なレベルで分析するのか
    ビジネスの言葉で表現
    イベント ファクトテーブルの1行
    ?

    View Slide

  35. ©XFLAG
    粒度の例
    1人のユーザーが
    1回ゲームをプレイした

    View Slide

  36. ©XFLAG
    粒度の例
    マルチプレイの場合
    vs.
    3レコード
    ユーザー
    に関する分析
    1レコード
    ゲームプレイ
    に関する分析

    View Slide

  37. ©XFLAG
    粒度
    粒度の決め方によって
    分析できる事柄も、その後の設計も
    全然変わってくる

    View Slide

  38. ©XFLAG
    1. ビジネスプロセスを選ぶ
    2. 粒度を決める
    3. Dimensionテーブルを決める
    4. Factテーブルを決める
    4 Steps

    View Slide

  39. ©XFLAG
    Dimensions
    WHEN
    WHERE
    WHO
    WHAT
    WHY
    HOW
    about Facts
    ビジネスの
    言葉で

    View Slide

  40. ©XFLAG
    1. ビジネスプロセスを選ぶ
    2. 粒度を決める
    3. Dimensionテーブルを決める
    4. Factテーブルを決める
    4 Steps

    View Slide

  41. ©XFLAG
    Facts
    イベントに対する計測値
    e.g.
    ○ ゲームのクリア時間
    ○ ゲームのスコア
    ○ 購入した商品の値段
    足したり掛けたりできるもの

    View Slide

  42. ©XFLAG
    1. ビジネスプロセスを選ぶ
    2. 粒度を決める
    3. Dimensionテーブルを決める
    4. Factテーブルを決める
    4 Steps

    View Slide

  43. ©XFLAG
    メリット

    View Slide

  44. ©XFLAG
    Good Points
    ○ クエリのパフォーマンスが向上
    ○ JOIN が少なくなるため
    ○ 分析軸を柔軟に追加できる
    ○ Dimension テーブルを好きなだけ拡張
    ○ データを理解しやすい
    ○ ビジネスプロセスを反映したテーブル設計

    View Slide

  45. ©XFLAG
    ディメンションテーブルが充実
    分析がパワーアップ

    View Slide

  46. ©XFLAG
    Good Points
    ○ クエリのパフォーマンスが向上
    ○ JOIN が少なくなるため
    ○ 分析軸を柔軟に追加できる
    ○ Dimension テーブルを好きなだけ拡張
    ○ データを理解しやすい
    ○ ビジネスプロセスを反映したテーブル設計

    View Slide

  47. ©XFLAG
    データの理解
    業務システム
    システムの実装を表現
    データウェアハウス
    ビジネスプロセスを表現
    ステージ
    ステージ
    グループ
    1
    N
    ステージ
    非正規化
    ゲーム開始 ゲーム終了 LEFT JOIN
    ゲームプレイ

    View Slide

  48. ©XFLAG
    やってみた

    View Slide

  49. ©XFLAG
    課題
    ○ データを理解するのが難しい
    ○ 汎用的のないサマリテーブルたち

    View Slide

  50. ©XFLAG
    作戦
    できるところからちょっとずつ
    重要なビジネスプロセスから順番に着手していっ

    View Slide

  51. ©XFLAG
    大事だったこと
    ビジネスプロセスの分析や
    粒度をきちんと決めたこと
    Data Warehouse 全体の整合性を保つ
    ことができた

    View Slide

  52. ©XFLAG
    (参考)
    ○ Enterprise Bus Matrix
    ○ Confirmed Dimensions

    View Slide

  53. ©XFLAG
    結果
    ○ シンプルなテーブル構造
    ○ 汎用的なサマリテーブル
    ○ セルフサービスなデータ分析

    View Slide

  54. ©XFLAG
    体感では
    ½ 〜 ⅓ くらい

    View Slide

  55. ©XFLAG
    結果
    ○ シンプルなテーブル構造
    ○ 汎用的なサマリテーブル
    ○ セルフサービスなデータ分析

    View Slide

  56. ©XFLAG
    つらかったこと

    View Slide

  57. ©XFLAG
    つらかったこと
    ○ 設計するの大変
    ○ 時間がかかりすぎるリスク
    ⇒ 設計コストと得られるメリットの比較
    生データとの併用も

    View Slide

  58. ©XFLAG
    つらかったこと
    ○ Hive や Redshift などでは難しい部分も
    ○ データ更新
    ○ 実行効率
    ⇒ 妥協も大事

    View Slide

  59. ©XFLAG
    美味しいところだけ
    いただくの精神

    View Slide

  60. ©XFLAG
    https://www.amazon.co.jp/dp/B00DRZX6XS
    参考

    View Slide

  61. ©XFLAG
    テーブル設計は基礎体力
    日々の分析業務や
    機械学習プロジェクトを
    加速させる

    View Slide

  62. ©XFLAG
    Thank You

    View Slide

  63. ©XFLAG
    Credits
    Special thanks to all the people who made and
    released these awesome resources for free:
    ○ Icon made by Freepik from flaticon
    ○ Photographs by Unsplash

    View Slide