Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

©XFLAG © XFLAG

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

©XFLAG Why Dimensional Modeling?

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

©XFLAG キャンペーン施策のROI の算出に必要な値が欲し い 結構大変そうなので、ク エリのテンプレート作って 後で調整できるようにして おきますね

Slide 15

Slide 15 text

©XFLAG 300行くらいの SQL

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

©XFLAG Introduction to Dimensional Modeling

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

©XFLAG 設計の手順

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

©XFLAG メリット

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

©XFLAG やってみた

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

©XFLAG つらかったこと

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

©XFLAG Thank You

Slide 63

Slide 63 text

©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