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

モデリングはキラキラ技術より地味だが役に立つ / modeling-over-shiny-tech

モデリングはキラキラ技術より地味だが役に立つ / modeling-over-shiny-tech

# Event

データモデリングとデータ基盤の構築・運用
(第14回ちゅらコラボ)CARTA HOLDINGS x ちゅらデータ 合同イベント
https://churadata.connpass.com/event/254417/

ぼくのかんがえる最高のレポーティング基盤
https://speakerdeck.com/pei0804/hokufalsekankaeruzui-gao-falserehoteinkuji-pan-at-awsdeshi-jian-analytics-modernization

ディメンションモデリングモデリング
https://zenn.dev/pei0804/articles/dimensional-modeling

スタースキーマ
https://zenn.dev/pei0804/articles/star-schema-design

コンフォームドディメンション
https://zenn.dev/pei0804/articles/conformed-dimensions

Jumpei Chikamori

August 19, 2022
Tweet

More Decks by Jumpei Chikamori

Other Decks in Technology

Transcript

  1. よくあるデータ基盤関連の相談 Q. クエリが大変で辛いです。 A. モデリングしてください。 Q. 数値が揃わないです。 A. モデリングしてください。 Q.

    クエリが遅いです。 A. モデリングしてください。 Q. データ活用したいんですよね。 A. モデリングしてください。
  2. 何が良くないか? • SELECT id, amount ◦ score_typeが確定すると、 どうやら何のidかamountか確定するらしい。 • FROM

    score ◦ score・・・は、つまり、何なんだろうか。 • WHERE score_type = 1 ◦ 1って何ですか?
  3. 登場する用語 • 広告接触(インプレッション) ◦ ユーザーに広告を表示した時に、通知されるイベント。 • 広告クリック(クリック) ◦ ユーザーが見た広告をクリックした時に、 通知されるイベント。

    • アクション(コンバージョンなど) ◦ ユーザーが広告をクリックした上で、何らかのアクションを 起こした時に、通知されるイベント。(例えば、商品購入)
  4. • タイプ = 広告接触 • クリエイティブID = 1 • 広告接触ID

    = hoge • クリックID = null • アクションID = null • アクション名 = nul • 日時 = xxx • 接触回数 = 1 • タイプ = クリック • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • アクションID = null • アクション名 = null • 日時 = yyy • 接触回数 = null • タイプ = アクション • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • アクションID = bar • アクション名 = 購入 • 日時 = zzz • 接触回数 = null score.log score.log score.log score.log
  5. • タイプ = 広告接触 • クリエイティブID = 1 • 広告接触ID

    = hoge • クリックID = null • アクションID = null • アクション名 = null • 日時 = xxx • 接触回数 = 1 • タイプ = クリック • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • アクションID = null • アクション名 = null • 日時 = yyy • 接触回数 = null • タイプ = アクション • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • アクションID = bar • アクション名 = 購入 • 日時 = zzz • 接触回数 = null 発生タイミングが混ざったログ score.log score.log score.log 認知負荷オンパレード。
  6. 発生タイミングが混ざったログは難しい • 広告接触タイプの時は、 クリックIDとかアクションID等が 必ずnullになる。 暗黙的な仕様というやつ。 • 日時はタイプによって、 意味が変わる。 例えば、クリックタイプなら、

    クリック時間になる。 • タイプ = 広告接触 • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = null • アクションID = null • アクション名 = null • 日時 = xxx • 接触回数 = 1 score.log
  7. • クリエイティブID = 1 • 広告接触ID = hoge • 広告接触日時

    = xxx • 接触回数 = 1 • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • クリック日時 = yyy • 接触回数 = null • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • アクションID = bar • アクション名 = 購入 • アクション日時 = zzz 発生タイミングごとに作る 広告接触.log クリック.log アクション.log 発生タイミングで素直に分けると、全て関係があるものだけになる。
  8. • クリエイティブID = 1 • 広告接触ID = hoge • 広告接触日時

    = xxx • 接触回数 = 1 • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • クリック日時 = yyy • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • アクションID = bar • アクション名 = 購入 • アクション日時 = zzz ファクト化 広告接触ファクト クリックファクト アクションファクト
  9. • クリエイティブID = 1 • 広告接触ID = hoge • 広告接触日時

    = xxx • 接触回数 = 1 • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • クリック日時 = yyy • クリエイティブID = 1 • 広告接触ID = hoge • クリックID = fuga • アクションID = bar • アクション名 = 購入 • アクション日時 = zzz ディメンション作成 広告接触ファクト クリックファクト アクションファクト • クリエイティブID = 1 • クリエィティブ名 = 名前 クリエィティブディメンション 全てのファクトとJOIN可能なディメンションを用意する。 これをコンフォームドディメンションと呼ぶ。