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

rawSQLからdbtへの移行プロセスについて

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for ugmuka ugmuka
August 23, 2022
160

 rawSQLからdbtへの移行プロセスについて

Avatar for ugmuka

ugmuka

August 23, 2022
Tweet

Transcript

  1. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 1

    Whoami select * from employnee where name = ‘向井雄二’; name company role twitter job 向井雄二 DATUM STUDIO データエンジニア @ugmuka データ分析基盤の 受託開発
  2. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 3

    データ分析基盤のベストプラクティス 構築初期 ✓ データマートは直接データレイクを参照 ✓ ユースケースに合わせてデータマートを作成 > 初期段階ではデータウェアハウス層を作らない(「実践的データ基盤への処方箋」) データマート層 データレイク層 データマート層 データレイク層 データウェア ハウス層 構築中盤 ✓ スタースキーマなどでモデリングデータウェアハウス層を作成 ✓ 共通指標からデータマートを作成
  3. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 4

    今日の話題 構築初期 ✓ データマートは直接データレイクを参照 ✓ ユースケースに合わせてデータマートを作成 > 初期段階ではデータウェアハウス層を作らない(「実践的データ基盤への処方箋」) データマート層 データレイク層 データマート層 データレイク層 データウェア ハウス層 構築中盤 ✓ スタースキーマなどでモデリングデータウェアハウス層を作成 ✓ 共通指標からデータマートを作成 今日の話題:実際移行ってどうやる?
  4. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 5

    アジェンダ 2. よくあるケース
  5. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 6

    よくあるケース 改善ポイント ✓ 直接データレイク層からクエリ発行すると分析ロジックが複雑になりがち ✓ 分析ができるようにBIを構築したい RDSベースでの分析基盤からSnowflake, BQへの移行 データマート DB 基幹システムの DB アナリスト 基幹システムの DB S3 データレイク層 データウェア ハウス層 データマート層 BI ✓ Excel ✓ Redash etc… ユーザー ユーザー 移 行 前 移 行 後
  6. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 7

    rawSQLからdbtへの移行 SQLをワークフローエンジンで制御→dbtでHappyになる rawSQL dbt DRYさ ✓ jinjaでテンプレート化できるため簡潔 ✓ 大規模になると長大なコードになる ドキュメント化 ✓ とても大変 ✓ 自動でドキュメント生成される 依存関係 ✓ 実行順を考慮してワークフローエンジンを実 装する必要がある ✓ 考慮不要 可読性 ✓ 基本的に読みやすい ✓ 過度なテンプレート, macro化でなければ SQLと同等 ※DRY: Don‘t Repeat Yourselfの略
  7. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 8

    移行時の差分 AsIs コード実装 ✓ SQLを直書き ダッシュボード ✓ なし マート 作成方式 ✓ select + insertで追記 モデリング ✓ なし ToBe ✓ dbtで簡潔なコード ✓ TableauやLookerの開発が必要 ✓ 毎回全量テーブル作成 (incrementalであれば差分更新も可) ✓ スタースキーマ
  8. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 9

    アジェンダ 3. 移行のプラクティス
  9. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 10

    移行前に事前検証期間を設ける 事前にdbtでマートの仮組みを行って、これまでユーザーの見ていたもの(※重要)と一致しているか確認 ロジック実装 ダッシュボード マート 作成方式 モデリング AsIs ✓ SQLを直書き ✓ なし ✓ select + insertで追記 ✓ なし ToBe ✓ dbtで簡潔なコード ✓ Lookerの開発が必要 ✓ 毎回全量テーブル作成 ✓ スタースキーマ 事前検証 ✓ dbtで仮組み ✓ リファクタ前提 ✓ なし ✓ すべてビュー ✓ スタースキーマ
  10. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 11

    なぜ事前検証が必要? ex) • 上流システムでバグが起きていて、分析クエリを書くときに常にク レンジングしている • 経理部門と事業部門で同じ指標を見ているが定義が違う 2. 実際にユーザーが使用している集計結果との 比較をリリース前に行う 1. 移行前に行われていた分析の暗黙知を抽出する ex) • 実際にユーザーにレポートされていた集計結果はマートから更に 担当者がExcelで加工したものだった • 「この数字いつもみてるやつと全然違うんですけど…」 →SQLの完全移行でないPJでも、急激な数値の変更は混乱 を招く
  11. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 12

    Good/Bad practice 事前検証→ToBeでの変更点が多くなると、数値のずれが発生しがち ロジック実装 ダッシュボード マート 作成方式 モデリング 事前検証(Good) ✓ dbtで仮組み ✓ リファクタ前提 ✓ なし ✓ すべてビュー ✓ スタースキーマ 事前検証(Bad) ✓ SQLを直書き ✓ なし ✓ すべてビュー ✓ なし pros • 最悪SQLをそのまま載せるだけで もよい。 • このビュー最新だっけ?問題が発 生しない。 pros • 本番と同じ構造だとデバッグしやすい。 • 最小粒度で集計するので色々な形で 検証できる(週次、月次、Qごと…)
  12. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 13

    Bad practice Badで進めるとこうなります ロジック実装 ダッシュボード マート 作成方式 モデリング AsIs ✓ SQLを直書き ✓ なし ✓ select + insertで追記 ✓ なし ToBe ✓ dbtで簡潔なコード ✓ Lookerの開発が必要 ✓ 毎回全量テーブル作成 ✓ スタースキーマ ✓ SQLを直書き ✓ なし ✓ すべてビュー ✓ なし 前述の実際の分析ロジックとの乖 離で燃えやすい。 担当者にヒアリングしないとわから ないこともあるため、回避は難し い。 事前検証→ToBeへの変更点が 多いと燃える。差分を減らすよう に事前検証の時点で実装すれば 回避できる。 事前検証(Bad)
  13. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 15

    今日の話題 構築初期 ✓ データマートは直接データレイクを参照 ✓ ユースケースに合わせてデータマートを作成 > 初期段階ではデータウェアハウス層を作らない(「実践的データ基盤への処方箋」) データマート層 データレイク層 データマート層 データレイク層 データウェア ハウス層 構築中盤 ✓ スタースキーマなどでモデリングデータウェアハウス層を作成 ✓ 共通指標からデータマートを作成 今日の話題:実際移行ってどうやる? 冒頭のやつ
  14. © 2022 DATUM STUDIO Co. Ltd. PROPRIETARY & CONFIDENTIAL. 16

    まとめ データマート層 データレイク層 データマート層 データレイク層 データウェア ハウス層 データマート層 データレイク層 データウェア ハウス層 rawSQL きたないdbt きれいなdbt 2. 検証の比較元を決める ✓ 全社向けの経営レポート、etc… 3. dbtで仮に値を出す ✓ データ構造は本番と同じ形 (スタースキーマ、data vaultなど) ✓ 過度にtemplate化する必要はない 4. dbtonicなコードにリファクタ ✓ レガシーなSQLからdbtのSQLへのリファクタリング などが参 考になる 1. 事前検証期間を設ける ✓ 大体この期間で要件変更が起こる