Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

© 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

Slide 3

Slide 3 text

祝🎉 dbt Labs Japan Launch!

Slide 4

Slide 4 text

© Recruit Co., Ltd. All Rights Reserved 4 本⽇お伝えしたいこと dbt のすばらしさ x dbt 運⽤のリアル ~ Job 管理編 ~

Slide 5

Slide 5 text

© Recruit Co., Ltd. All Rights Reserved Agenda 1. データパイプラインにおける Job 管理の課題 2. Asset Centric な依存管理の課題 3. 監査ログを使った data observation 5 お願い:スライドに ✋ があったら 当てはまる⽅は挙⼿をお願いします

Slide 6

Slide 6 text

© 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

Slide 7

Slide 7 text

© Recruit Co., Ltd. All Rights Reserved データパイプラインにおける Job 管理の課題 session 1

Slide 8

Slide 8 text

Q: 500⾏以上のSQLを解析したことがある ✋

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

© Recruit Co., Ltd. All Rights Reserved 10 Job の分割 中間テーブルを作れば、処理をシンプルにできる

Slide 11

Slide 11 text

© Recruit Co., Ltd. All Rights Reserved 11 分割した job の依存関係の管理 分割した Job は順番通りに実⾏する必要がある 依存関係をきちんと管理するため、ワークフローエンジンを使う

Slide 12

Slide 12 text

Q: Jobは成功しているのに、データが更新されてい なかったことがある✋

Slide 13

Slide 13 text

Q: クエリの循環参照を起こしたことがある✋

Slide 14

Slide 14 text

© Recruit Co., Ltd. All Rights Reserved 14 依存関係管理の課題 taskが増えていくと、依存関係を把握しづらくなる データ変換処理では、カラムを⼀つ追加する等により、依存するタスクが増えやすい

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

© Recruit Co., Ltd. All Rights Reserved 17 dbt のすばらしさとは Asset Centric なアプローチで、Job の依存関係管理から解放 ↓ 複雑なデータ基盤を運⽤できるようになった

Slide 18

Slide 18 text

© Recruit Co., Ltd. All Rights Reserved Asset Centric な依存管理の課題 session 2

Slide 19

Slide 19 text

Q: dbtの処理が終わるのに5分以上かかる✋

Slide 20

Slide 20 text

Q: 異なる dbt job が、おなじテーブルを更新してい た✋

Slide 21

Slide 21 text

© Recruit Co., Ltd. All Rights Reserved 21 データの多重更新 Asset Centric な Job 管理で、複数の Job を起動すると データの多重更新を起こしやすい

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

© Recruit Co., Ltd. All Rights Reserved 23 Asset Centric の弱点 Jobが複数あり、除外条件が定義されると、どの Job がどのテーブルを更新するのか データの定義(SQL)と除外条件の両⽅を読まないとわからない

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

© Recruit Co., Ltd. All Rights Reserved 監査ログを使った data observation session 3

Slide 26

Slide 26 text

Q: Jobがコケたら、⼀旦⾃分に連絡が来る✋

Slide 27

Slide 27 text

© 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 の 情報を確認できる

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

© 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文

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

© Recruit Co., Ltd. All Rights Reserved 32 テーブルを更新した Job 以外の情報も可視化する スロット消費量やjob実⾏時間も取得できる

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

© Recruit Co., Ltd. All Rights Reserved 35 今は、Job とテーブルの更新履歴を可視化し、改善点を探せる状態 今後は、Job を統合したり 不要な Job を削減する必要がある ソースとなるデータ量の負荷や連携タイミングといった パイプラインの課題を乗り越えてJob削減した話は… 今後の展望

Slide 36

Slide 36 text

https://www.recruit.co.jp/special/techconference202 5 リクルート テックカンファレンス    リクルートの開発事例・ナレッジを共有する 技術カンファレンス こちらで発表するので、ぜひご参加ください! (自分のセッションは20日17:45~予定です)

Slide 37

Slide 37 text

Q: Recruit Techカンファレンスに⾏きたいと思った ✋

Slide 38

Slide 38 text

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