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 v1.8で追加された単体テストを触ってみた
Search
k_data_analyst
June 20, 2024
Programming
2
810
dbt v1.8で追加された単体テストを触ってみた
Tokyo dbt Meetup #9 の発表資料です。
k_data_analyst
June 20, 2024
Tweet
Share
More Decks by k_data_analyst
See All by k_data_analyst
入社してからデータ分析基盤でやってきたことを 真面目にドヤる!!
k_data_analyst
0
38
⚡Lightdashを試してみた
k_data_analyst
1
1.4k
"あえて"データ整備人になるメリットを前向きに考えてみた
k_data_analyst
0
150
Other Decks in Programming
See All in Programming
How to stabilize UI tests using XCTest
akkeylab
0
130
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
140
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
1k
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
15
8.9k
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
130
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
300
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.9k
Ruby x Terminal
a_matsuda
7
600
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
990
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
210
安いハードウェアでVulkan
fadis
0
200
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
250
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Bash Introduction
62gerente
615
210k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
300
ラッコキーワード サービス紹介資料
rakko
1
2.7M
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
My Coaching Mixtape
mlcsv
0
74
Code Review Best Practice
trishagee
74
20k
Paper Plane (Part 1)
katiecoart
PRO
0
5.7k
The Spectacular Lies of Maps
axbom
PRO
1
630
Documentation Writing (for coders)
carmenintech
77
5.3k
Making Projects Easy
brettharned
120
6.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.7k
Transcript
Tokyo dbt Meetup #9 dbt v1.8で追加された単体テストを触ってみた ©STORES,Inc. All Rights Reserved.
自己紹介 名前 香村 貴之(こうむら たかゆき) 所属 STORES株式会社 テクノロジー部門 データ本部 職種
アナリティクスエンジニア
本日のゴール dbt の単体テストの振る舞いを理解した上で、 「こういうケースで使えそう」というイメージを 掴んでもらうこと
目次 dbt で利用できる3つのテスト機能の比較 実際に動かしてみた 自社で単体テストを導入するとしたら 01 02 03
• dbt v1.7までのテスト ◦ Generic Test ▪ dbt がはじめから用意してくれているテスト機能 ▪
unique や not null などを検証できる ▪ modelsディレクトリ配下の.ymlで定義する ◦ Singular Test ▪ SELECT文をもとに想定しないケースが発生しているかを検証するテスト機能 ▪ testsディレクトリ配下に.sqlを用意する • dbt v1.8で追加された単体テスト(Unit Test) ◦ モデル(SQL)のロジックに対する検証を行える ◦ Generic Test 同様、modelsディレクトリ配下の.ymlで定義する dbt で利用できる3つのテスト機能の比較 https://docs.getdbt.com/docs/build/unit-tests
• 実行環境 ◦ dbt-core:1.8.0 ◦ dbt-bigquery:1.8.1 実際に動かしてみた
実際に動かしてみた / 単一モデルに対する単体テスト sample.users id integer email string staging.users id
integer email string is_valid_email_address boolean
実際に動かしてみた / 単一モデルに対する単体テスト データソースとして渡すレコード 期待する結果
実際に動かしてみた / 単一モデルに対する単体テスト 期待する値 実際の値
実際に動かしてみた / 単一モデルに対する単体テスト sample.users id integer email string staging.users id
integer email string is_valid_email_address boolean
実際に動かしてみた / 単一モデルに対する単体テスト
実際に動かしてみた / 発行されるクエリ① input で指定した静的レコード モデルのクエリ
実際に動かしてみた / 発行されるクエリ② input で指定した静的レコード input で指定した静的レコードをもとに、 モデルのロジックを通した結果 expect で指定した静的レコード
input と expect の結果を 結合して出力
実際に動かしてみた / 複数モデルを参照するモデルに対する単体テスト sample.orders order_id integer sample.order_items order_id integer product_id
integer status string staging.orders order_id integer quantity integer shipped_quantity integer fulfilled boolean
実際に動かしてみた / 複数モデルを参照するモデルに対する単体テスト 参照するモデルごとに input を定義するだけ
実際に動かしてみた / incrementalモデルを参照するモデルに対する単体テスト events event_id integer event_date date https://docs.getdbt.com/docs/build/unit-tests#unit-test ing-incremental-models
実際に動かしてみた / incrementalモデルを参照するモデルに対する単体テスト マクロの振る舞いを 指定して実行することができる 正しくINSERT/MERGEできたかどうかは 検証できない。 が、検討はされている↓ https://github.com/dbt-labs/dbt-core /issues/8664
実際に動かしてみた / ephemeralモデルを参照するモデルに対する単体テスト 複数モデルの例で出したCTE部分を ephemeral モデルで切り出した
実際に動かしてみた / ephemeralモデルを参照するモデルに対する単体テスト 接続先のDWHからスキーマを読み込め ないため、 直接SELECT文を書いている https://docs.getdbt.com/docs/build/unit-tests#unit-testing -a-model-that-depend-on-ephemeral-models
• Q:input に対して expect のレコード数が不足している場合どうなる? • A:エラーになる。 実際に動かしてみた / Q&A
• Q:input に対して expect のレコード数が不足している場合どうなる? • A:エラーになる。 実際に動かしてみた / Q&A
期待に対してこのレコードが不足しているためエラー
• Q:rows の順序には意味がある? • A:特に意味はない。 実際に動かしてみた / Q&A 順序を入れ替えてもPASSする
input をデータソースとしたとき に得られる結果に、 expectのレコードが過不足なく含 まれていればPASSする • Q:rows にはスキーマの全カラムを指定する必要がある? • A:全カラムを指定する必要はない。
実際に動かしてみた / Q&A expect から email を削除
• Q:$ dbt buildを実行した場合の処理順序は? • A:先に単体テストが実行され、その後モデルがデプロイされる。 実際に動かしてみた / Q&A
1. GoogleAnalytics4 のデータをもとにしたリファラー判定処理 a. 複雑なロジックを組んでリファラーの判定を行っている b. 近々リファクタリングを検討している 2. 複数プロダクトの実績を加算している処理 a.
過去にカラムの選択ミスにより間違った数値を算出してしまった b. 変数のぬけもれや、カラムの選択ミスを検出したい 3. 正規表現を含むCASE式 a. GA4のページビューのデータを元に、カテゴライズしている b. 新しいパターンを加えた際に、判定処理順序の兼ね合いで今までとは異なる判定が されてしまった 自社で単体テストを導入するとしたら
本日のゴール dbt の単体テストの振る舞いを理解した上で、 「こういうケースで使えそう」というイメージを 掴んでもらうこと
None