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
360
Asset Centric な データ変換パイプラインの攻略法
2025/01/21に、Tokyo dbt Meetup #11で発表した、森田の資料です。
Recruit
PRO
January 21, 2025
Tweet
Share
More Decks by Recruit
See All by Recruit
まなび領域における生成AI活用事例
recruitengineers
PRO
2
140
AI時代にエンジニアはどう成長すれば良いのか?
recruitengineers
PRO
1
200
AIを用いたカスタマーサポートの業務プロセス・組織変革の実現
recruitengineers
PRO
1
130
問い合わせ自動化の技術的挑戦
recruitengineers
PRO
2
230
「Air ビジネスツールズ」のクライアントサポートにおける生成 AI 活用
recruitengineers
PRO
0
86
AI活用のためのアナリティクスエンジニアリング
recruitengineers
PRO
1
130
SaaS事業のデータマネジメント事例
recruitengineers
PRO
0
120
Kaggleで鍛えたスキルの実務での活かし方 競技とプロダクト開発のリアル
recruitengineers
PRO
1
400
LLM のプロダクト導入における開発の裏側と技術的挑戦
recruitengineers
PRO
1
170
Other Decks in Technology
See All in Technology
visionOS 開発向けの MCP / Skills をつくり続けることで XR の探究と学習を最大化
karad
1
220
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
540
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
260
猫でもわかるKiro CLI(AI 駆動開発への道編)
kentapapa
0
230
AI時代のSaaSとETL
shoe116
1
170
進化するBits AI SREと私と組織
nulabinc
PRO
1
200
[JAWSDAYS2026]Who is responsible for IAM
mizukibbb
0
760
VLAモデル構築のための AIロボット向け模倣学習キット
kmatsuiugo
0
220
OpenClaw を Amazon Lightsail で動かす理由
uechishingo
0
140
"作る"から"使われる"へ:Backstage 活用の現在地
sbtechnight
0
160
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
230
[E2]CCoEはAI指揮官へ。Bedrock×MCPで構築するコスト・セキュリティ自律運用基盤
taku1418
0
180
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
200
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
290
First, design no harm
axbom
PRO
2
1.1k
The Invisible Side of Design
smashingmag
302
51k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
180
Git: the NoSQL Database
bkeepers
PRO
432
66k
Mobile First: as difficult as doing things right
swwweet
225
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
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エンジニア データアプリケーションエンジニア クラウドエンジニア