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
dbt_ベストプラクティス_完全に理解した.pdf
Search
dach
September 26, 2023
Technology
2
920
dbt_ベストプラクティス_完全に理解した.pdf
dbt 初学者向けに基本的な使い方やディレクトリ構成についてを説明します
dach
September 26, 2023
Tweet
Share
More Decks by dach
See All by dach
プロジェクトマネージャーと炎の回避術
dach
0
900
SLO_By_Google_Cloud_Monitoring
dach
0
180
状態遷移テスト完全に理解しよう.pdf
dach
0
810
JWT完全に理解しよう-認証編-.pptx.pdf
dach
0
740
JWT完全に理解しよう-公開鍵編-.pptx.pdf
dach
0
660
チームの垣根を越境する_チーム間交換留学
dach
0
85
設計書のないサービスとの付き合い方.pptx.pdf
dach
0
180
designからWebページを作るやりかた完全に理解した.pdf
dach
1
320
チャレンジコーナー__DFDのモブプロ.pdf
dach
1
2.9k
Other Decks in Technology
See All in Technology
未経験者・初心者に贈る!40分でわかるAndroidアプリ開発の今と大事なポイント
operando
5
730
普通のチームがスクラムを会得するたった一つの冴えたやり方 / the best way to scrum
okamototakuyasr2
0
100
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
310
いま注目のAIエージェントを作ってみよう
supermarimobros
0
340
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
300
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
470
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
210
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
350
S3アクセス制御の設計ポイント
tommy0124
3
200
「その開発、認知負荷高すぎませんか?」Platform Engineeringで始める開発者体験カイゼン術
sansantech
PRO
2
110
KotlinConf 2025_イベントレポート
sony
1
140
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
470
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
460k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Designing Experiences People Love
moore
142
24k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Faster Mobile Websites
deanohume
309
31k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Practical Orchestrator
shlominoach
190
11k
4 Signs Your Business is Dying
shpigford
184
22k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Code Reviewing Like a Champion
maltzj
525
40k
Transcript
dbt ベストプラクティス 完全に理解した dach@
自己紹介 Belong Inc. チキン南蛮エンジニア @dach やってること データ分析基盤 入 荷 検
査 消 去 差 配 中古スマホ Belong blog Youtube
Agenda 1. dbt の基本要素と動かし方を理解する 2. Layer 構成と責務の分割について理解する 3. テストについて理解する
※ 所要時間 30 min 程度を想定 (LT...?)
Agenda 1. dbt の基本要素と動かし方を理解する 2. Layer 構成と責務の分割について理解する 3. テストについて理解する
※ 所要時間 30 min 程度を想定 (LT...?) 近日ブログにて公開予定
本編に入る前に... 実は #29 の時に「dbt 完全に理解したい」という内容で話していたことがあった 知識 0 状態からアップデートした知見を共有できれば
Agenda 1. dbt の基本要素と動かし方を理解する 2. Layer 構成と責務の分割について理解する
※ 所要時間 30 min 程度を想定 (LT...?)
dbt の基本要素と動かし方を理解する [Section Topic] 1. jaffle_shop で学ぶ dbt 2. 抑えておいたほうがいい用語解説
3. 実践 dbt 実装
Overview [この章の目的] • 難しいことはさておき、 dbt について完全に理解する [この章で学べること] • dbt はどういうツールであるか
• dbt を利用した実装の仕方 • dbt の基本的な使い方やよく出る用語
[データ分析基盤初心者向け補足情報 ] 1. データ分析基盤の全体像 2. ELT(ETL) について 3. dbt とは
[本編] 1. jaffle_shop で学ぶ dbt 2. 抑えておいたほうがいい用語解説 3. 実践 dbt 実装 Section Topics
[データ分析基盤初心者向け補足情報 ] 1. データ分析基盤の全体像 2. ELT(ETL) について 3. dbt とは
[本編] 1. jaffle_shop で学ぶ dbt 2. 抑えておいたほうがいい用語解説 3. 実践 dbt 実装 Section Topics
DataSource データ分析基盤の全体像 DWH Source 1 Source 2 Source 3 BI
tools アプリ 生データ 蓄積 データ加工 抽出 抽出 完全性 チェック データ 保持 分析結果 算出 分析素材
データ分析では、様々な DataSource (社内アプリや SaaS など) のデータを利用する必要があります。デー タ分析ができるように、サイロ化された場所からのデータ移動や加工が必要です。 ELT(ETL) について 元のソースからデータを取得する
ことを指します 利用される宛先に移動することを 指します 標準化や整形、など分析が可能な 形式にすることを指します Extract (抽出) Load (移動) Transform (変換)
dbt は、データ分析の領域における 「Transform」 を行うためのツールです。 SQL ファーストの変換ワークフロー であるため、学習コストが低いことが特徴です。 dbt とは? 元のソースからデータを取得する
ことを指します 利用される宛先に移動することを 指します 標準化や整形、など分析が可能な 形式にすることを指します Extract (抽出) Load (移動) Transform (変換) T における デファクト スタンダード
• dbt は、モジュール性、移植性、CI/CD、ドキュメントなどのソフトウェア エンジニアリングのベスト プラ クティスに従って、チームが分析コードを迅速かつ共同で展開できるようにする SQL ファーストの変 換ワークフロー •
DWH 構築の ELT/ETL 処理における 「 T (Transform)」を担当 • Transform におけるデファクトスタンダードと言っても過言ではない • ほとんどの Modern Data Stack との連携が可能 https://www.getdbt.com/product/what-is-dbt/ dbt とは?
[データ分析基盤初心者向け補足情報 ] 1. dbt とは? 2. データ分析基盤の全体像 3. ELT(ETL) について
[本編] 1. jaffle_shop で学ぶ dbt 2. 抑えておいたほうがいい用語解説 3. 実践 dbt 実装 Section Topics
以下のサンプルユースケースを実現するテーブルを作ること • サンプルユースケース ◦ 顧客別にまとまった、最新の注文情報・支払い状況を確認する Section Goal
Q. jaffle_shop とは? A. dbt のチュートリアルで使われる、架空の e コマースストア • Repo
URL ◦ https://github.com/dbt-labs/jaffle_shop • こんな感じのデータが揃っている jaffle_shop で学ぶ dbt
リポジトリ開くとこんな感じ jaffle_shop で学ぶ dbt
Q. サンプルユースケースを実現するために何をすれば良い? A. 動かせばユースケースを実現するテーブルが勝手に作れます [動かし方] 1. dbt を install 2.
所定の DB に接続するための設定を行う 3. サンプルデータを入れる 4. dbt を実行する jaffle_shop で学ぶ dbt
出来上がったものがこちら jaffle_shop で学ぶ dbt
データの流れ(Data Lineage)だとこんな感じ jaffle_shop で学ぶ dbt
# 接続の確認 % dbt debug # サンプルデータの投入 % dbt seed
# テーブルの構築 % dbt run # さっきの図を作る % dbt generate % dbt serve 実際のコマンドだとこんな感じ jaffle_shop で学ぶ dbt
• dbt で作られたプロジェクトなら、簡単にテーブルを管理できます • dbt run を実行するだけでテーブルが作られます • 初めてのときは dbt
の install や接続先の設定をする必要があります jaffle_shop で学ぶ dbt: まとめ
[データ分析基盤初心者向け補足情報 ] 1. dbt とは? 2. データ分析基盤の全体像 3. ELT(ETL) について
[本編] 1. jaffle_shop で学ぶ dbt 2. 抑えておいたほうがいい用語解説 3. 実践 dbt 実装 Section Topics
今回の LT の中でも登場する dbt の用語にピックアップして説明します • モデル ◦ dbt で行うデータ変換処理を指します
◦ ざっくりいうと、「1 SQL ファイル = 1 モデル」です • マテリアライゼーション( materialization) ◦ dbt においてモデルを保持する方法の選択肢のことです ◦ v1.5.x 時点で選択肢は 4つあります ◦ 後で説明します 抑えておいたほうがいい用語解説
[データ分析基盤初心者向け補足情報 ] 1. dbt とは? 2. データ分析基盤の全体像 3. ELT(ETL) について
[本編] 1. jaffle_shop で学ぶ dbt 2. 抑えておいたほうがいい用語解説 3. 実践 dbt 実装 Section Topics
dbt の実装は至ってシンプルです クエリを書く!! 具体的なモデルを見ていきます 実践 dbt 実装
「顧客別にまとまった、最新の注文情報・支払い 状況を確認する」を実現しているモデル 実践 dbt 実装
[要素] ref • 事前定義されているマクロ • 定義済みモデルを参照する • Data Lineage 図で紐づくだけじゃなくて、
環境差分とかもいい感じに解消してくれる • e.g. dev-dach-test -> prod-dach-test 実践 dbt 実装 データを引っ張ってくる 関心毎に分けて集計 集計結果を結合
• クエリを書く • 管理ができるように関心事で処理を分ける 実践 dbt 実装: まとめ
Agenda 1. dbt の基本要素と動かし方を理解する 2. Layer 構成と責務の分割について理解する 3. テストについて理解する
※ 所要時間 30 min 程度を想定 (LT...?)
Layer 構成と責務の分割について理解する [Section Topic] 1. materialization を理解する 2. コンサーンでディレクトリを分離する
[この章の目的] • モデルを作るときに気をつけること理解する [この章で学べること] • モデルの永続化について • ベストプラクティスに則ったディレクトリ分割 Overview
1. materialization を理解する 2. コンサーンでディレクトリを分離する Section Topics
全部で4つあります (v1.5.x 時点) これらをモデルに選択することでどのようにモデルを保持するかが決まります。 1. view 2. table 3. ephemeral
4. incremental materialization を理解する
1. view a. view テーブル b. 実行ごとに View として再構築される c.
常に最新データが参照可能で、モデルの修正がすぐに反映される d. ただし、参照のたびにクエリコストが発生する 2. table 3. ephemeral 4. incremental materialization を理解する
1. view 2. table a. モデルを実体化して持つ b. 実行ごとにデータが再作成される c. 結果を直接参照できるため、分析ツールや
macro からの利用が容易 d. 更新が必要な場合には手動で再実行する必要がある 3. ephemeral 4. incremental materialization を理解する
1. view 2. table 3. ephemeral a. 実行時に一時テーブルとしてモデルに組み込まれる (CTE) b.
= WITH 句 c. クエリの複雑性を分離できる d. デバッグが困難になる可能性がある 4. incremental materialization を理解する
1. view 2. table 3. ephemeral 4. incremental a. モデルを実体化して持つ
b. 設定した戦略にしたがって増分蓄積する c. 全量蓄積よりもストレージコストが抑えられる d. 変更に弱い materialization を理解する
1. view 2. table 3. ephemeral 4. incremental materialization を理解する:
まとめ
1. materialization を理解する 2. コンサーンでディレクトリを分離する Section Topics
3つの Layer で構成されている 1. staging 2. intermediate 3. marts コンサーンでディレクトリを分離する
staging • データのクレンジング、変換、整形を行う • 各 DataSource ごとにサブディレクトリが切られる • materialization は
view を選択する • データの結合や集計などは行わない コンサーンでディレクトリを分離する
intermeiate • marts が複雑になった時、ビジネスロジックを分離するために使う • モデルが少数であったり、複雑でなければ利用しない • materialization は ephemeral
を利用する コンサーンでディレクトリを分離する
marts • 特定のエンティティ(コンセプトとも呼ばれます )を実現する • ユーザーから唯一参照可能なレイヤー • view もしくは table
を基本的に使う • 必要に応じて incremental を選択する コンサーンでディレクトリを分離する
コンサーンでディレクトリを分離する
• モデル実装時には Layer を意識する • Layer 毎に使うべき materialization が決まっている •
詳細ルールはベストプラクティスを参照する コンサーンでディレクトリを分離する: まとめ
• dbt を使うとデータ変換がいい感じに管理できる • dbt を使う時はベストプラクティスを参照しよう まとめ
49 This material is confidential and the property of Belong
Inc. Blog や Youtube も見てね blog Youtube