Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Asset Centric な データ変換パイプラインの攻略法
Search
Recruit
PRO
January 21, 2025
Technology
2
300
Asset Centric な データ変換パイプラインの攻略法
2025/01/21に、Tokyo dbt Meetup #11で発表した、森田の資料です。
Recruit
PRO
January 21, 2025
Tweet
Share
More Decks by Recruit
See All by Recruit
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
3
170
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
3
170
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
4
1.6k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
280
Browser
recruitengineers
PRO
12
3.7k
JavaScript 研修
recruitengineers
PRO
8
2k
TypeScript入門
recruitengineers
PRO
37
14k
モダンフロントエンド 開発研修
recruitengineers
PRO
13
7.8k
Webアクセシビリティ入門
recruitengineers
PRO
4
2.1k
Other Decks in Technology
See All in Technology
文字列操作の達人になる ~ Kotlinの文字列の便利な世界 ~ - Kotlin fest 2025
tomorrowkey
2
250
「タコピーの原罪」から学ぶ間違った”支援” / the bad support of Takopii
piyonakajima
0
160
今から間に合う re:Invent 準備グッズと現地の地図、その他ラスベガスを周る際の Tips/reinvent-preparation-guide
emiki
0
110
AI機能プロジェクト炎上の 3つのしくじりと学び
nakawai
0
180
OTEPsで知るOpenTelemetryの未来 / Observability Conference Tokyo 2025
arthur1
0
350
CLIPでマルチモーダル画像検索 →とても良い
wm3
1
660
デザインとエンジニアリングの架け橋を目指す OPTiMのデザインシステム「nucleus」の軌跡と広げ方
optim
0
120
GTC 2025 : 가속되고 있는 미래
inureyes
PRO
0
130
実践マルチモーダル検索!
shibuiwilliam
1
450
GraphRAG グラフDBを使ったLLM生成(自作漫画DBを用いた具体例を用いて)
seaturt1e
1
170
プロダクト開発と社内データ活用での、BI×AIの現在地 / Data_Findy
sansan_randd
1
670
オブザーバビリティと育てた ID管理・認証認可基盤の歩み / The Journey of an ID Management, Authentication, and Authorization Platform Nurtured with Observability
kaminashi
2
1.4k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4k
Visualization
eitanlees
150
16k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
940
The Invisible Side of Design
smashingmag
302
51k
Documentation Writing (for coders)
carmenintech
75
5.1k
4 Signs Your Business is Dying
shpigford
186
22k
Transcript
© Recruit Co., Ltd. All Rights Reserved Asset Centric な
データ変換パイプラインの攻略法 株式会社リクルート データ推進室 プロダクト開発統括室 森⽥ 順也 2024/01/21 dbt meetup dbt labs Japan Launch イベント前夜祭
© 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
祝🎉 dbt Labs Japan Launch!
© Recruit Co., Ltd. All Rights Reserved 4 本⽇お伝えしたいこと dbt
のすばらしさ x dbt 運⽤のリアル ~ Job 管理編 ~
© Recruit Co., Ltd. All Rights Reserved Agenda 1. データパイプラインにおける
Job 管理の課題 2. Asset Centric な依存管理の課題 3. 監査ログを使った data observation 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
© Recruit Co., Ltd. All Rights Reserved データパイプラインにおける Job 管理の課題
session 1
Q: 500⾏以上のSQLを解析したことがある ✋
© Recruit Co., Ltd. All Rights Reserved 9 Transform における
Job の特徴 ⼀⾒シンプルなタスクでも、細々とした処理が多数出てくる SQLは数百⾏規模に膨れ上がりがち
© Recruit Co., Ltd. All Rights Reserved 10 Job の分割
中間テーブルを作れば、処理をシンプルにできる
© Recruit Co., Ltd. All Rights Reserved 11 分割した job
の依存関係の管理 分割した Job は順番通りに実⾏する必要がある 依存関係をきちんと管理するため、ワークフローエンジンを使う
Q: Jobは成功しているのに、データが更新されてい なかったことがある✋
Q: クエリの循環参照を起こしたことがある✋
© Recruit Co., Ltd. All Rights Reserved 14 依存関係管理の課題 taskが増えていくと、依存関係を把握しづらくなる
データ変換処理では、カラムを⼀つ追加する等により、依存するタスクが増えやすい
© Recruit Co., Ltd. All Rights Reserved 15 Asset Centric
な依存関係管理 データそのものに定義された情報だけで依存関係を管理する 依存関係を直感的に把握でき、Job を意識する必要がない
© Recruit Co., Ltd. All Rights Reserved 16 Asset Centric
なツール例 dbt SQLの中で参照されているテーブルを再帰的にたどることで、データ リネージ(データの流れの系譜)を構築してくれる dagstar SQLに閉じず、 APIリクエスト結果などでも依存関係を管理できる
© Recruit Co., Ltd. All Rights Reserved 17 dbt のすばらしさとは
Asset Centric なアプローチで、Job の依存関係管理から解放 ↓ 複雑なデータ基盤を運⽤できるようになった
© Recruit Co., Ltd. All Rights Reserved Asset Centric な依存管理の課題
session 2
Q: dbtの処理が終わるのに5分以上かかる✋
Q: 異なる dbt job が、おなじテーブルを更新してい た✋
© Recruit Co., Ltd. All Rights Reserved 21 データの多重更新 Asset
Centric な Job 管理で、複数の Job を起動すると データの多重更新を起こしやすい
© Recruit Co., Ltd. All Rights Reserved 22 多重更新を避けるための機能 dbtの
exclude 機能は、特定のモデルを実⾏対象から除外できる 多重更新が起きているテーブルを洗いだし、逐⼀ exclude で除外すればよい
© Recruit Co., Ltd. All Rights Reserved 23 Asset Centric
の弱点 Jobが複数あり、除外条件が定義されると、どの Job がどのテーブルを更新するのか データの定義(SQL)と除外条件の両⽅を読まないとわからない
© Recruit Co., Ltd. All Rights Reserved 24 実際におきた課題 job
B の実⾏時、table X で不整合が発⽣し、下流テーブルが作られないケース job C、job Dは正しく成功する?tableXを参照しているから失敗する?
© Recruit Co., Ltd. All Rights Reserved 監査ログを使った data observation
session 3
Q: Jobがコケたら、⼀旦⾃分に連絡が来る✋
© 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 の 情報を確認できる
© Recruit Co., Ltd. All Rights Reserved 28 BigQuery 監査ログをつかった
data observation BigQuery 監査ログとdbtの query comment 機能を使って Jobと更新テーブルのステータスをモニタリングする
© Recruit Co., Ltd. All Rights Reserved 29 BigQuery 監査ログの基本
監査ログの protopayload_auditlog.metadataJson というフィールドに JSON形式で BigQuery のテーブル⽣成 Job のログが格納される
© 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文
© Recruit Co., Ltd. All Rights Reserved 31 テーブルを更新した Job
を可視化する 監査ログから Job 名‧テーブル名‧⽣成時刻の3つを取得する
© Recruit Co., Ltd. All Rights Reserved 32 テーブルを更新した Job
以外の情報も可視化する スロット消費量やjob実⾏時間も取得できる
© Recruit Co., Ltd. All Rights Reserved 33 実際のモニタでわかること Job
J の実行時間が 伸びている 新規に Job A が登場し テーブルが追加されている Job J,C,E が同じテーブルを 多重更新している 実行時間や スロット消費の詳細も わかる
© Recruit Co., Ltd. All Rights Reserved 34 Asset Centric
なアプローチで、Job の依存関係管理から解放 ↓ 複雑なデータ基盤を運⽤できるようになった ↓ Asset Centric なJob管理の複雑さ(多重更新)が⽣まれた ↓ テーブルと Job の対応はモニタリング等で運⽤対処 まとめ
© Recruit Co., Ltd. All Rights Reserved 35 今は、Job とテーブルの更新履歴を可視化し、改善点を探せる状態
今後は、Job を統合したり 不要な Job を削減する必要がある ソースとなるデータ量の負荷や連携タイミングといった パイプラインの課題を乗り越えてJob削減した話は… 今後の展望
https://www.recruit.co.jp/special/techconference202 5 リクルート テックカンファレンス リクルートの開発事例・ナレッジを共有する 技術カンファレンス こちらで発表するので、ぜひご参加ください! (自分のセッションは20日17:45~予定です)
Q: Recruit Techカンファレンスに⾏きたいと思った ✋
© Recruit Co., Ltd. All Rights Reserved 38 We are
hiring! カジュアル⾯談はこちらより お申し込みください データサイエンティスト 機械学習エンジニア データエンジニア アナリティクスエンジニア R&Dエンジニア データアプリケーションエンジニア クラウドエンジニア