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

Asset Centric な データ変換パイプラインの攻略法

Recruit
January 21, 2025

Asset Centric な データ変換パイプラインの攻略法

2025/01/21に、Tokyo dbt Meetup #11で発表した、森田の資料です。

Recruit

January 21, 2025
Tweet

More Decks by Recruit

Other Decks in Technology

Transcript

  1. © Recruit Co., Ltd. All Rights Reserved Asset Centric な

    データ変換パイプラインの攻略法 株式会社リクルート データ推進室 プロダクト開発統括室 森⽥ 順也 2024/01/21 dbt meetup dbt labs Japan Launch イベント前夜祭
  2. © Recruit Co., Ltd. All Rights Reserved プロダクト開発統括室 データ推進室 結婚‧旅⾏‧⾃動⾞領域

    アナリティクスエンジニア /テックリード 2015-2019 IoTデータの研究開発 2019-2020 住宅領域 アナリティクスエンジニア 2020-現在  結婚‧旅⾏‧⾃動⾞領域 アナリティクスエンジニア 森⽥ 順也 Junya MORITA Profile 経歴  所属 2 X: https://x.com/jjjjj_kn Podcast: https://open.spotify.com/show/6Xc6jNS2p1UqjnPppwO80V?si=WXCP2O58RrePvsjTMomtIw Zenn: https://zenn.dev/mjunya1030
  3. © Recruit Co., Ltd. All Rights Reserved 4 本⽇お伝えしたいこと dbt

    のすばらしさ x dbt 運⽤のリアル ~ Job 管理編 ~
  4. © Recruit Co., Ltd. All Rights Reserved Agenda 1. データパイプラインにおける

    Job 管理の課題 2. Asset Centric な依存管理の課題 3. 監査ログを使った data observation 5 お願い:スライドに ✋ があったら 当てはまる⽅は挙⼿をお願いします
  5. © Recruit Co., Ltd. All Rights Reserved 運⽤している分析基盤 Data Lake

    Cloud Storage Data Mart BigQuery Data Warehouse BigQuery クライアント様向け アプリ・基盤 カスタマー向け アプリ・基盤 データ抽出・ロード Cloud Composer Transform Extract Load マート生成 dbt Core / Cloud Composer レコメンドシステム 本日の主役となる マート生成ジョブ 集客最適化‧営業活動効率化、ABテストの評価等、事業の価値を最⼤化するためのデータ分析基盤 GCP環境を基盤に、dbt と Cloud Composer によるマート⽣成ジョブを運⽤ マート⽣成ジョブで処理されるデータ量は数百TB
  6. © Recruit Co., Ltd. All Rights Reserved 9 Transform における

    Job の特徴 ⼀⾒シンプルなタスクでも、細々とした処理が多数出てくる SQLは数百⾏規模に膨れ上がりがち
  7. © Recruit Co., Ltd. All Rights Reserved 10 Job の分割

    中間テーブルを作れば、処理をシンプルにできる
  8. © Recruit Co., Ltd. All Rights Reserved 11 分割した job

    の依存関係の管理 分割した Job は順番通りに実⾏する必要がある 依存関係をきちんと管理するため、ワークフローエンジンを使う
  9. © Recruit Co., Ltd. All Rights Reserved 14 依存関係管理の課題 taskが増えていくと、依存関係を把握しづらくなる

    データ変換処理では、カラムを⼀つ追加する等により、依存するタスクが増えやすい
  10. © Recruit Co., Ltd. All Rights Reserved 15 Asset Centric

    な依存関係管理 データそのものに定義された情報だけで依存関係を管理する 依存関係を直感的に把握でき、Job を意識する必要がない
  11. © Recruit Co., Ltd. All Rights Reserved 16 Asset Centric

    なツール例 dbt SQLの中で参照されているテーブルを再帰的にたどることで、データ リネージ(データの流れの系譜)を構築してくれる dagstar SQLに閉じず、 APIリクエスト結果などでも依存関係を管理できる
  12. © Recruit Co., Ltd. All Rights Reserved 17 dbt のすばらしさとは

    Asset Centric なアプローチで、Job の依存関係管理から解放 ↓ 複雑なデータ基盤を運⽤できるようになった
  13. © Recruit Co., Ltd. All Rights Reserved 21 データの多重更新 Asset

    Centric な Job 管理で、複数の Job を起動すると データの多重更新を起こしやすい
  14. © Recruit Co., Ltd. All Rights Reserved 22 多重更新を避けるための機能 dbtの

    exclude 機能は、特定のモデルを実⾏対象から除外できる 多重更新が起きているテーブルを洗いだし、逐⼀ exclude で除外すればよい
  15. © Recruit Co., Ltd. All Rights Reserved 23 Asset Centric

    の弱点 Jobが複数あり、除外条件が定義されると、どの Job がどのテーブルを更新するのか データの定義(SQL)と除外条件の両⽅を読まないとわからない
  16. © Recruit Co., Ltd. All Rights Reserved 24 実際におきた課題 job

    B の実⾏時、table X で不整合が発⽣し、下流テーブルが作られないケース job C、job Dは正しく成功する?tableXを参照しているから失敗する?
  17. © Recruit Co., Ltd. All Rights Reserved 27 data observation

    によって⾜りない情報を補う どのテーブルが、いつ、どの Job によって更新されているのか、⾃動収集する elementary-data https://docs.elementary-data.com/dbt/pac kage-models#dbt-run-results dbt run の後に on-run-end フックを使ってロ グを記録し、「どのテーブルがどの Job で更 新されたのか」や「どの Job が失敗したの か」といった情報を記録してくれる BigQuery監査ログ https://cloud.google.com/bigquery/docs/referen ce/auditlogs dbtが生成したテーブルと、それを実行した Job の 情報を確認できる
  18. © Recruit Co., Ltd. All Rights Reserved 28 BigQuery 監査ログをつかった

    data observation BigQuery 監査ログとdbtの query comment 機能を使って Jobと更新テーブルのステータスをモニタリングする
  19. © Recruit Co., Ltd. All Rights Reserved 29 BigQuery 監査ログの基本

    監査ログの protopayload_auditlog.metadataJson というフィールドに JSON形式で BigQuery のテーブル⽣成 Job のログが格納される
  20. © Recruit Co., Ltd. All Rights Reserved 30 dbt のクエリに

    Job 名を⼊れる dbt は model ファイルに記述された Jinja 形式の SQL を compile してから BigQuery 上で実⾏する。 この際、compile する際に動的な comment を付与できる。 query_comment: append: true comment: "Job name is {{ var(JOB_NAME, 'unknown') }}" dbt run --select table_X --vars={"JOB_NAME": "daily-Job-10am"} /* Job name is daily-Job-10am */ create or replace view `gcp-project`.`my_dataset`.`table_X` OPTIONS( description="""""", ) as ... project.yml の設定 build 時に渡すオプション 生成されるDDL文
  21. © Recruit Co., Ltd. All Rights Reserved 31 テーブルを更新した Job

    を可視化する 監査ログから Job 名‧テーブル名‧⽣成時刻の3つを取得する
  22. © Recruit Co., Ltd. All Rights Reserved 32 テーブルを更新した Job

    以外の情報も可視化する スロット消費量やjob実⾏時間も取得できる
  23. © Recruit Co., Ltd. All Rights Reserved 33  実際のモニタでわかること Job

    J の実行時間が 伸びている 新規に Job A が登場し テーブルが追加されている Job J,C,E が同じテーブルを 多重更新している 実行時間や スロット消費の詳細も わかる
  24. © Recruit Co., Ltd. All Rights Reserved 34 Asset Centric

    なアプローチで、Job の依存関係管理から解放 ↓ 複雑なデータ基盤を運⽤できるようになった ↓ Asset Centric なJob管理の複雑さ(多重更新)が⽣まれた ↓ テーブルと Job の対応はモニタリング等で運⽤対処 まとめ
  25. © Recruit Co., Ltd. All Rights Reserved 35 今は、Job とテーブルの更新履歴を可視化し、改善点を探せる状態

    今後は、Job を統合したり 不要な Job を削減する必要がある ソースとなるデータ量の負荷や連携タイミングといった パイプラインの課題を乗り越えてJob削減した話は… 今後の展望
  26. © Recruit Co., Ltd. All Rights Reserved 38 We are

    hiring! カジュアル⾯談はこちらより お申し込みください データサイエンティスト 機械学習エンジニア データエンジニア アナリティクスエンジニア R&Dエンジニア データアプリケーションエンジニア クラウドエンジニア