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

第3回データモデリング?どのレベルでやるの?

SnowflakeDataManagementJP
November 12, 2023
1.7k

 第3回データモデリング?どのレベルでやるの?

SnowflakeUserGroupデタマネコミュニティ第3回活動で利用した資料を公開します!

SnowflakeDataManagementJP

November 12, 2023
Tweet

More Decks by SnowflakeDataManagementJP

Transcript

  1. 2 自己紹介 小宮山 紘平 / こみぃ / Kohei Komiyama Twitter:

    @kommy_jp Facebook: kohei.komiyama Blog: https://zenn.dev/kommy339 Snowflake 2023 Snowflake Data Superheroes Title Data Management Team Manager Data Engineer Magic: The Gathering Body-building Escape game Hobbies Interests
  2. • データカタログ ◦ 提供しているデータの定義を正確に文書化した資料 ◦ 陳腐化しないようにアップデートされる必要あり • BIツール ◦ データを使う人が望む形でデータを提供しないとデータは使

    われない • 適切なサポート ◦ ツールの提供だけではなく導入支援も必須 ◦ みんながSQLを書けるわけではない 26 正しくデータを提供できていますか?
  3. • データ活用が進めばより多くの要望が生まれる ◦ こんなデータもほしい ◦ こういう切り口でもデータが見たい ◦ 新しい機能が出たからそれらのデータも加えたい ◦ KPIの定義が変わった(何故だ)

    • その要望を繰り返し叶えていく終わりなき旅 ◦ ログの追加実装 ◦ データマートの追加 ◦ データカタログのアップデート ◦ データ提供ツールの拡充 33 データモデリングは終わりなきサイクルのプロセス
  4. 38 ディメンショナルモデル 日付 商品ID ユーザーID 個数 売上 2023/01/05 D01 2130001

    1 100 2023/01/07 F01 2520318 1 80 2023/01/07 G03 1138654 1 100 2023/01/10 E06 1130032 4 200 ファクト ユーザーID ユーザー名 年齢 2130001 溝口 9 2520318 相模原 35 1138654 本郷 18 1130032 弥生 20 ディメンション 商品ID 商品名 分類 D01 絆創膏 医薬品 F01 消しゴム 文房具 G03 輪ゴム 日用雑貨 E06 じゃがいも 食品 ディメンション
  5. 40 大福帳モデル 日付 年月 期 品目 メーカー 大分類 小分類 原価

    売上 Pt利用 割引 2023/01/05 202301 1 絆創膏 ニチバン 日用品 医薬品 100 200 0 10% 2023/01/07 202301 1 消しゴム コクヨ 日用品 文房具 40 100 0 0% 2023/01/07 202301 1 輪ゴム コクヨ 日用品 雑貨 60 120 30 0% 2023/01/10 202301 1 じゃがいも JA北海道 食品 穀類 80 120 10 0%
  6. • データを以下の3つの概念で管理する手法 ◦ 各カテゴリでキーとなるデータ(ハブ) ◦ それぞれのデータ(サテライト) ◦ 各ハブ間の関連性(リンク) • 監査性に優れデータの変化にも柔軟で(以下略)

    • クエリがJOINだらけになるのでRedashなどのSQLベースのBIツー ルを使っている場合には扱うのにSQLスキルが要求される • 理解すること自体に非常に時間がかかる(体験談)のでよほどハ イレベルなデータチームを有していないとそもそも導入すらでき ないと思う 41 Data Vault
  7. 43 Data Vault SELECT * (略) FROM hub_sales hs INNER

    JOIN link_sales_product lsp ON hs.sales_h_key = lsp.sales_h_key INNER JOIN hub_products hp ON hp.product_h_key = lsp.product_h_key INNER JOIN sat_sales ss ON hs.sales_h_key = ss.sales_h_key INNER JOIN sat_products sp ON sp.product_h_key = hp.product_h_key WHERE sat_sales.loaded_at = (select max(loaded_at) from sat_sales) AND sat_products.loaded_at = (select max(loaded_at) from sat_products) ;
  8. 44 Data Vault SELECT * (略) FROM hub_sales hs INNER

    JOIN link_sales_product lsp ON hs.sales_h_key = lsp.sales_h_key INNER JOIN hub_products hp ON hp.product_h_key = lsp.product_h_key INNER JOIN sat_sales ss ON hs.sales_h_key = ss.sales_h_key INNER JOIN sat_products sp ON sp.product_h_key = hp.product_h_key WHERE sat_sales.loaded_at = (select max(loaded_at) from sat_sales) AND sat_products.loaded_at = (select max(loaded_at) from sat_products) ; ディメンショナルモデルだったらJOINが1つで良かったこと をJOINが4つ???? (このSQLだとまだユーザー情報と紐づいてない)