$30 off During Our Annual Pro Sale. View Details »

ディメンショナル モデリング入門 / introduction-to-dimensional-modeling

ディメンショナル モデリング入門 / introduction-to-dimensional-modeling

Jumpei Chikamori

August 31, 2023
Tweet

More Decks by Jumpei Chikamori

Other Decks in Technology

Transcript

  1. ディメンショナル
    モデリング入門
    みんなのデータモデル講座 第2回 進化編
    snowvillage.slack.com #みんなのシリーズ

    View Slide

  2. アジェンダ
    ● 自己紹介
    ● 概要
    ● 実践
    ● まとめ

    View Slide

  3. 自己紹介
    ぺい
    @pei0804
    近森淳平(チカモリ ジュンペイ)
    CARTA HOLDINGS (旧VOYAGE GROUP)
    Zucks システム局 エンジニア

    View Slide

  4. techblog.cartaholdings.co.jp, The Zen of Zucks, 2022/06/10, https://techblog.cartaholdings.co.jp/entry/the-zen-of-zucks

    View Slide

  5. 講座のゴール
    ● 会話をモデルに、落とし込む勘所を掴む。

    View Slide

  6. 話さないこと
    ● データをどのように集めるかについては、言及しません。
    ○ データがある程度、揃ってる前提で話をします。

    View Slide

  7. アジェンダ
    ● 自己紹介
    ● 概要
    ● 実践
    ● まとめ

    View Slide

  8. ディメンショナルモデリングとは

    View Slide

  9. 世界には、2つの情報システムがある。

    View Slide

  10. それが、業務システムと分析システム。

    View Slide

  11. 業務システム・分析システム
    ビジネスプロセスの実行支援する業務システム、
    ビジネスプロセスを分析支援する分析システムがあります。
    それぞれ根本的に異なる目的があるため、
    異なる原則に基づき設計が進化してきました。

    View Slide

  12. 第3正規化とディメンショナルモデリング
    業務システムの目的は、ビジネスプロセスで発生した
    重要な事実や行動を記録する。一般的にはトランザクションシステムと呼ばれ
    ている。このようなシステムをリレーショナル・データベースで実装する時に、業
    務システムに最適なスキーマ設計として、
    第3正規化が広く活用されている。
    一方で、分析システムは、実行されたビジネスプロセスの評価をする。
    このビジネスプロセスの評価に、ディメンショナルモデリングが
    非常に有効な手法である。

    View Slide

  13. ビジネスプロセスとは

    View Slide

  14. ビジネスプロセスとは
    ビジネスプロセスとは、組織が行う業務活動のこと。
    ● 広告を表示する。
    ● 注文を受ける。
    ● 請求書を発行する。
    ● 支払いを受ける。
    ● 学生を登録する。
    ● 医療処置の実行する。

    View Slide

  15. ディメンショナルモデリングを使うことで、
    業務活動が分析可能になります。

    View Slide

  16. 難しそうですが、
    会話をモデリングするだけです。

    View Slide

  17. アジェンダ
    ● 自己紹介
    ● 概要
    ● 実践
    ● まとめ

    View Slide

  18. アドテクのビジネスプロセスを
    モデリングしてみよう
    アドテクを題材にやっていきます。
    簡単な例を使って、データをモデリングしていく工程を、
    お見せできればと思います。
    実際の現場のデータは、もっとカオスだとは思いますが、
    本質的なところは大きく変わらないので、参考になると思います。

    View Slide

  19. Four-Step
    Dimensional Design Process

    View Slide

  20. www.kimballgroup.com/data-warehouse-business-intelligence-resources/
    kimball-techniques/dimensional-modeling-techniques/four-4-step-design-process

    View Slide

  21. Four-Step Dimensional Design Process
    1. ビジネスプロセスの選択。(Select the business process)
    2. 粒度を宣言する。(Declare the Grain)
    3. ディメンションを特定する。(Identify the dimensions)
    4. ファクトを特定する。(Identify the facts)

    View Slide

  22. Four-Step Dimensional Design Process
    1. ビジネスプロセスの選択。(Select the business process)
    2. 粒度を宣言する。(Declare the Grain)
    3. ディメンションを特定する。(Identify the dimensions)
    4. ファクトを特定する。(Identify the facts)

    View Slide

  23. 1.ビジネスプロセスの選択

    View Slide

  24. ビジネスプロセスの選択
    データをモデリングする前に、ビジネスを理解することは重要です。
    用意されたデータに目を通して、モデリングすることは簡単ですが、
    最も良いのは、社内の色々な従業員と対話して、
    人々が何をしたいのかを理解することです。
    また、この工程は全体の中で、最も重要です。
    ここで失敗すると、修復困難な欠陥が、連鎖的に発生することになります。
    ビジネスプロセスの整理には、Business Process Modelling Notation
    (BPMN)やUnified Modelling Language (UML)が使えます。

    View Slide

  25. どっから手をつければ・・・

    View Slide

  26. 秘伝のエクセル

    View Slide

  27. 需要は秘伝のエクセルに宿る
    これからデータ基盤を作る人に、おすすめの方法があります。
    それは、ビジネスユーザーの手元にあるエクセルを貰うことです。
    用意された環境だけでは、得られない本当にほしいデータまでの
    ラストワンマイルが、表現されていることがよくあります。
    勿論どういった背景で、そのシートが作られているか聞きましょう。
    その上で、同等のものが出せるモデリングをしましょう。
    恐らく人々は、モデリングの力に感動するでしょう。

    View Slide

  28. 選択するビジネスプロセス
    今回は、「先月の広告クリック数を、広告掲載メディア別で見たい。」を、
    ビジネスユーザーが見たいという前提で進めます。
    実際には、対話を通じて、何に何故、興味があるかを引き出しましょう。

    View Slide

  29. Four-Step Dimensional Design Process
    1. ビジネスプロセスの選択。(Select the business process)
    2. 粒度を宣言する。(Declare the Grain)
    3. ディメンションを特定する。(Identify the dimensions)
    4. ファクトを特定する。(Identify the facts)

    View Slide

  30. 2.粒度を宣言する

    View Slide

  31. 粒度を宣言する
    粒度の宣言とは、個々のファクトの行が、
    何を表しているかを正確に指定します。
    粒度とは、ファクトの測定値に関する詳細度を決めるものです。
    もう少し具体的に書くと、
    「ファクトテーブルの単一行をどのように表現するか」を決めます。

    View Slide

  32. ファクトとは
    ビジネスプロセスに関連する量的な数値や指標を表します。
    よくあるファクトの例。
    ● 売上
    ● 費用
    ● 利益
    ● 在庫量

    View Slide

  33. 粒度の宣言例
    粒度は、業務システムなどで発生するビジネスプロセスが、
    補足できる内容で決定されることがほとんどです。
    例えば、以下のようなものが粒度の宣言例です。
    ● 顧客の販売取引で、個々の商品のスキャンごとに1行。
    ● 空港のゲートでスキャンされた個々の搭乗券1枚につき1行。

    View Slide

  34. 粒度の宣言の重要性
    無視をしてよさそうな工程ですが、実は非常に重要です。
    現場で働いていて、最も混乱が起きるポイントでもあります。
    粒度の認識に齟齬がある場合に何が起きるか、
    例えばファクトを横断した分析は非常に困難になります。
    具体例を出すと、月次のデータと日次のデータを、
    日次で横断して分析したいと言われても出来ませんよね?
    データの粒度が揃っていないと、すぐに破綻して、
    このステップに戻ってくることになります。

    View Slide

  35. 粒度は最小粒度で宣言する
    将来的に、どのような質問が来るかはわかりません。
    そのため、粒度を宣言する時は、最小粒度を推奨します。
    常に最小粒度にしておけば、出そうと思えば出せる状態になります。
    例えば、時間別のデータがあるとします。このデータから、
    日次、月次、年次のデータにすることは、可能ですが、
    年次のデータを月次に戻すことはできませんといった具合に、
    低い粒度から、高い粒度は、表現できても、逆は無理だからです。

    View Slide

  36. 【問題】広告へのクリックの最小粒度は?

    View Slide

  37. 広告へのクリックの最小粒度
    「表示された広告に対するクリック1回につき、1行。」になります。
    クリックは、これ以上細かい表現にすることは無理そうなので、
    恐らくこれが最小粒度になるはずです。
    実践では、すぐに最小粒度を特定できないかもしれませんが、
    基本的には、これ以上細かく分割が出来ない状態になってれば、
    それは最小粒度になっているはずです。

    View Slide

  38. 粒度を間違えてるデータあるある
    粒度を間違えることある?と思う人も居るでしょう。
    確かに、この工程を踏んでいれば、間違えることはないです。
    粒度を意識してモデリングするのは、実は難しいです。
    例えば、複数のことを扱っているテーブルなんだけど、
    typeカラムで、うまく分岐させてるみたいなテーブル見たことありませんか?
    その手のテーブルは、基本的に粒度を間違えています。
    あとは、何かの事実を取得する際に、必ずWhere句が必須なデータとかも、
    粒度が怪しい可能性があります。意外と身近にあるので探してみてください。

    View Slide

  39. タイプで分岐させるテーブルの例
    SELECT id, amount
    FROM score
    WHERE score_type = 1

    View Slide

  40. ログから改善する
    ログから改善する価値については、
    過去に発表しているので、
    興味ある方は、
    こちらの資料を御覧ください。
    https://speakerdeck.com/pei0804/modeling-over-shiny-tech

    View Slide

  41. Four-Step Dimensional Design Process
    1. ビジネスプロセスの選択。(Select the business process)
    2. 粒度を宣言する。(Declare the Grain)
    3. ディメンションを特定する。(Identify the dimensions)
    4. ファクトを特定する。(Identify the facts)

    View Slide

  42. 3.ディメンションを特定する

    View Slide

  43. ディメンションとは
    事実(ファクト)に文脈を提供します。
    これは一般的にビジネスの観点からの属性や特性を表します。
    よくあるディメンションの例。
    ● 時間(年、四半期、月、日)
    ● 地理(国、州、都市)
    ● 製品(カテゴリ、製品名)
    ● 顧客(年齢、性別、地域)

    View Slide

  44. ディメンションの役割
    ビジネスプロセスを評価する上で、ファクト(事実)に意味はないです。
    ディメンション(文脈)がセットになって、ファクトは情報になります。
    冒頭に出した広告クリックに関する質問例も、
    広告クリックの数だけもらっても意味はなくて、
    そこに、文脈を付け加えることで情報になります。

    View Slide

  45. 【問題】先月の広告クリック数を、
    広告掲載メディア別で見たい。
    のディメンション(文脈)は?

    View Slide

  46. ディメンションを特定する
    「先月の広告クリック数を、広告掲載メディア別で見たい。」の
    ディメンションは、先月を表現する日付とメディアの2つです。
    作成するとしたら、以下のようなディメンションになります。
    ● media_key = bar
    ● media_id = 1
    ● media_name = メディア名
    ● etc…
    メディア ディメンション
    ● date_key = hoge
    ● date_day = 2023-06-12
    ● day_of_month = 06
    ● etc…
    日付ディメンション

    View Slide

  47. Four-Step Dimensional Design Process
    1. ビジネスプロセスの選択。(Select the business process)
    2. 粒度を宣言する。(Declare the Grain)
    3. ディメンションを特定する。(Identify the dimensions)
    4. ファクトを特定する。(Identify the facts)

    View Slide

  48. 4.ファクトを特定する

    View Slide

  49. ファクトの特定
    この工程では、「このプロセスは何を測定しているのか?」
    という問いに、答えることでファクトを特定します。
    基本的に、この工程では、粒度が適切に宣言されている場合には、
    特定作業で苦労することはありませんが、
    実データが宣言通りではないケースに、遭遇することがよくあります。

    View Slide

  50. ファクトの特定
    粒度の宣言を行っている場合、宣言した粒度通りに、
    ファクトを特定するだけです。
    テーブル構造的には、以下のようなイメージ。
    ● date_key = hoge
    ● click_key = fuga
    ● media_key = bar
    ● click_id = hoge
    ● media_id = 1
    ● clicked_at = 2022-06-12 …
    ● click_amount = 1
    ● etc…
    クリック ファクト 宣言した粒度
    「表示された広告に対するクリック1回につき、1行。」

    View Slide

  51. データの理想と現実
    この工程では、理想と現実に挟まれることが多くなります。
    想定と実データが違うことで、簡単に実現できないなどです。
    しかしながら、ユーザーの要求を優先することをおすすめします。
    欲しいものがあるなら、それを実現する方が良いです。
    システムの都合を優先すると、うまく行かないことの方が多いです。

    View Slide

  52. 扱いにくいデータに対しての戦い方
    データを整理し始めの頃は、扱いにくいデータに囲まれるものです。
    こういう場合にやれることは、2つあります。
    データそのものに改善を入れることで、扱いやすくする。
    加えて、データの作り方のベストプラクティスを示すことで、
    良いデータとは何か?の共通認識を組織で持つことです。
    データを整理するあなただけが、頑張るのではなく。
    全員で取り組むべき課題として捉えるのが、おすすめです。
    データは、営みから生まれるので、当然と言えば当然です。

    View Slide

  53. 平和に終われば、
    テーブルを作成して、SQLを書くだけ。

    View Slide

  54. ● date_key = hoge
    ● click_key = fuga
    ● media_key = bar
    ● etc…
    クリック ファクト
    ● media_key = fuga
    ● etc…
    メディア ディメンション
    ● date_key = 1
    ● etc…
    日付ディメンション
    media_key date_key

    View Slide

  55. 先月の広告クリック数を、広告掲載メディア別で見る
    SELECT
    d_media.media_name,
    sum(fct_clicks.click_amount) AS click_amount
    FROM fct_clicks
    INNER JOIN dim_media ON fct_clicks.media_key = d_media.media_key
    INNER JOIN dim_date ON fct_clicks.order_date_key = d_date.date_key
    WHERE d_date.day_of_month = 6
    GROUP BY 1

    View Slide

  56. ディメンショナルモデリングのメリット
    ● 決まったポリシーで、モデリングが行えるので、
    経験則に依存せずに、一定レベルの使い勝手を担保できる。
    ● 正規化したテーブルより、集計や分析クエリのパフォーマンスが高い。
    ● 分析業務の要求に対して柔軟に対応できる。
    ○ 例えば、ファクトやディメンションの追加などが容易。

    View Slide

  57. ディメンショナルモデリングのデメリット
    ● 読み取りに最適化されるため、トランザクションシステムには不向き。
    ● ETLプロセスが複雑になる。
    ○ 現代においては、便利なツールが増えたので、
    大きなデメリットではなくなった。(dbt, Dataform, etc…)
    ● 日本語でアクセスできる情報が、正規化に比べると少ない。

    View Slide

  58. さらに学びたい方へ
    ● ディメンションモデリング
    ○ https://zenn.dev/pei0804/articles/dimensional-modeling
    ● Building a Kimball dimensional model with dbt
    ○ https://docs.getdbt.com/blog/kimball-dimensional-model
    ● Star Schema The Complete Reference
    ○ 書籍です。

    View Slide

  59. モデリングに関する質とスピード
    モデリングにかけるコストと、価値提供までのリードタイムは、
    私の経験上、トレードオフの関係ではありません。
    適切なモデリングが行われてない現場ほど、リードタイムが長いです。
    例えば、少し違うレポートを出すだけで、クエリが大変なことになったりしてます。
    残念ながら、モデリングをサボっても、価値提供は早くなりません。
    むしろ、適切なモデリングが、素早い価値提供に直結します。

    View Slide

  60. アジェンダ
    ● 自己紹介
    ● 概要
    ● 実践
    ● まとめ

    View Slide

  61. まとめ

    View Slide

  62. 【問題】今日の広告表示数を、広告種別ごとに見たい。
    ディメンションとファクトはどれ?

    View Slide

  63. 今日の広告表示数を、広告種別ごとに見たい。
    ディメンション
    ファクト

    View Slide

  64. あとはやるだけ。

    View Slide