Developer Summit 2018 Summer
©XFLAGディメンショナルモデリングの勧め
View Slide
©XFLAGAbout Me生島 光株式会社ミクシィ XFLAG スタジオ解析グループデータ分析基盤の開発・運用GitHub: ojima-hTwitter: @ojima_hFacebook: hikaru.ojima
©XFLAG© XFLAG
©XFLAG今日話すこと使いやすいデータウェアハウスを手に入れるためにディメンショナル・モデリングを取り入れてみたお話
©XFLAGWhy DimensionalModeling?
©XFLAGBEFOREDBApp RedshiftAPIログ抽出そのまま分析チーム依頼作業待ち
©XFLAGBEFOREDBApp RedshiftAPIログ抽出そのまま分析チームZeppelin
©XFLAGステージのクリア数を数えたいんだけど それなら striker_stagesっていうテーブルの stateが 2 になってる行を数えればいいですよなにそれ意味わかんないstate の詳しい説明はサーバーの仕様書に書いてありますよ
©XFLAGPROBLEM● 仕様書を読まないと分析できない
©XFLAGステージのカテゴリごとのプレイ数を数えたいんだけどそれなら stage_flag っていうカラムの1ビット目を見たらわかりますよなにそれ意味わかんない詳しいことはサーバーのコード読めばわかるんですけどね
©XFLAGPROBLEM● 仕様書を読まないと分析できない● コードを読まないと分析できない
©XFLAGマルチプレイ数を数えたいんだけどそれなら striker_stagesテーブルを使えばいいですね。このテーブルは自己参照テーブルになっているのでこのカラムでGroup By して自分自身に結合クァwせdrftgyふじこlp;・・・
©XFLAGPROBLEM● 仕様書を読まないと分析できない● コードを読まないと分析できない● 複雑なテーブル構造
©XFLAGキャンペーン施策のROIの算出に必要な値が欲しい結構大変そうなので、クエリのテンプレート作って後で調整できるようにしておきますね
©XFLAG300行くらいの SQL
©XFLAGPROBLEM● 仕様書を読まないと分析できない● コードを読まないと分析できない● 複雑なテーブル構造● 長すぎる SQL
©XFLAGそうだ!サマリテーブルを作ろう!
©XFLAG〇〇っていう分析がしたいわかりましたサマリテーブル作ります△△っていう分析がしたいこの前作ったサマリテーブルは使えなさそうですね。わかりましたサマリテーブル作ります〜〜っていう分析がしたいこの前作ったサマリテーブルは使えな(以下略
©XFLAGPROBLEM● 仕様書を読まないと分析できない● コードを読まないと分析できない● 複雑なテーブル構造● 長すぎる SQL● 乱立する謎のサマリデータ
©XFLAGBI ツールは助けてくれない
©XFLAGPROBLEM● 仕様書を読まないと分析できない● コードを読まないと分析できない● 長すぎる SQL● 複雑なテーブル構造● 乱立する謎のサマリデータDimensionalModeling が解決してくれるかも
©XFLAGIntroduction toDimensional Modeling
©XFLAGデータ分析の流れETL整形ロード要件定義目的分析手法ゴールデータ収集サーバーログDB分析Σ自動化Data WarehouseData Lake
©XFLAGData Warehouse○ すぐに分析に取りかかれるデータ○ どんな分析にも使える柔軟性業務用データベースとは求められるものが違う(e.g. 正規化 )
©XFLAGDimensionalModelingData Warehouse の要件に合わせたテーブル設計
©XFLAGDimensional Modeling is...○ Ralph Kimball さんが20年以上前に提唱したDWH の設計手法
©XFLAGFACTDIMENSIONSDIMENSIONSDIMENSIONSDIMENSIONSイベント状態e.g. ゲームのプレイログFACTに対する説明e.g プレイしたステージに関する情報DIMENSIONSStar Schema
©XFLAG現実世界FACTDIMENSIONSDIMENSIONSDIMENSIONSDIMENSIONSDimensional Modeling
©XFLAG設計の手順
©XFLAG1. ビジネスプロセスを選ぶ2. 粒度を決める3. Dimensionテーブルを決める4. Factテーブルを決める4 Steps
©XFLAGビジネスプロセス= お客さんに提供しているサービス・機能(仮)例)「ゲームをプレイする」○ ビジネスプロセスの内容を言語化○ 使えるデータを確認
©XFLAG粒度対象のビジネスプロセスをどこまで詳細なレベルで分析するのかビジネスの言葉で表現イベント ファクトテーブルの1行?
©XFLAG粒度の例1人のユーザーが1回ゲームをプレイした
©XFLAG粒度の例マルチプレイの場合vs.3レコードユーザーに関する分析1レコードゲームプレイに関する分析
©XFLAG粒度粒度の決め方によって分析できる事柄も、その後の設計も全然変わってくる
©XFLAGDimensionsWHENWHEREWHOWHATWHYHOWabout Factsビジネスの言葉で
©XFLAGFactsイベントに対する計測値e.g.○ ゲームのクリア時間○ ゲームのスコア○ 購入した商品の値段足したり掛けたりできるもの
©XFLAGメリット
©XFLAGGood Points○ クエリのパフォーマンスが向上○ JOIN が少なくなるため○ 分析軸を柔軟に追加できる○ Dimension テーブルを好きなだけ拡張○ データを理解しやすい○ ビジネスプロセスを反映したテーブル設計
©XFLAGディメンションテーブルが充実分析がパワーアップ
©XFLAGデータの理解業務システムシステムの実装を表現データウェアハウスビジネスプロセスを表現ステージステージグループ1Nステージ非正規化ゲーム開始 ゲーム終了 LEFT JOINゲームプレイ
©XFLAGやってみた
©XFLAG課題○ データを理解するのが難しい○ 汎用的のないサマリテーブルたち
©XFLAG作戦できるところからちょっとずつ重要なビジネスプロセスから順番に着手していった
©XFLAG大事だったことビジネスプロセスの分析や粒度をきちんと決めたことData Warehouse 全体の整合性を保つことができた
©XFLAG(参考)○ Enterprise Bus Matrix○ Confirmed Dimensions
©XFLAG結果○ シンプルなテーブル構造○ 汎用的なサマリテーブル○ セルフサービスなデータ分析
©XFLAG体感では½ 〜 ⅓ くらい
©XFLAGつらかったこと
©XFLAGつらかったこと○ 設計するの大変○ 時間がかかりすぎるリスク⇒ 設計コストと得られるメリットの比較生データとの併用も
©XFLAGつらかったこと○ Hive や Redshift などでは難しい部分も○ データ更新○ 実行効率⇒ 妥協も大事
©XFLAG美味しいところだけいただくの精神
©XFLAGhttps://www.amazon.co.jp/dp/B00DRZX6XS参考
©XFLAGテーブル設計は基礎体力日々の分析業務や機械学習プロジェクトを加速させる
©XFLAGThank You
©XFLAGCreditsSpecial thanks to all the people who made andreleased these awesome resources for free:○ Icon made by Freepik from flaticon○ Photographs by Unsplash