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
280
Asset Centric な データ変換パイプラインの攻略法
2025/01/21に、Tokyo dbt Meetup #11で発表した、森田の資料です。
Recruit
PRO
January 21, 2025
Tweet
Share
More Decks by Recruit
See All by Recruit
Browser
recruitengineers
PRO
9
2.8k
JavaScript 研修
recruitengineers
PRO
8
1.7k
TypeScript入門
recruitengineers
PRO
36
12k
モダンフロントエンド 開発研修
recruitengineers
PRO
12
6.8k
Webアクセシビリティ入門
recruitengineers
PRO
4
1.8k
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
4
2.2k
モバイルアプリ研修
recruitengineers
PRO
6
1.9k
事業価値と Engineering
recruitengineers
PRO
10
6.1k
制約理論(ToC)入門
recruitengineers
PRO
10
4.3k
Other Decks in Technology
See All in Technology
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
460
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
830
ZOZOマッチのアーキテクチャと技術構成
zozotech
PRO
4
1.6k
Language Update: Java
skrb
2
300
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
410
エラーとアクセシビリティ
schktjm
1
1.3k
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
430
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
240
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
120
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
850
Agile PBL at New Grads Trainings
kawaguti
PRO
1
430
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
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エンジニア データアプリケーションエンジニア クラウドエンジニア