
今回はdbt公式の「Advanced Testing」コースを受講したので、その内容を整理し、学びや実践ポイントを共有したいと思います。
Introduction to Advanced Testing
テストとは、コードが期待通りに動作することを確認するために必要不可欠な手法です。
アナリティクスエンジニアリングでも、記述したSQLが期待したモデルを正しく生成しているかどうかを確認するためにテストを行います。
特にdbtでは、テストがSELECT文に変換され、マテリアライズされたモデルに対して実行されます。dbtで理想とされるテストは次の通りです。
■自動化されていること
■高速かつ信頼性が高いこと
■明確で有益な情報を提供すること
開発中には「dbt test」や「dbt build」を活用し、本番環境では定期的なジョブ設定で自動化されたテストを行います。
テストの対象と目的
dbtでは主に次の4種類のテストを行います。
【単一モデルの検証】
列の値やテーブルの制約、データの粒度が正しいかを確認します。
【モデル間の参照整合性】
他のモデル(テーブル)とのデータ整合性を確認します。
【特定のビジネスロジック】
特殊なビジネスルールを個別にSQLで検証します。
【データ鮮度(freshness)】
常に最新のデータを使用しているかを確認します。
これらの基準を組織内で明確にするため、「dbt_meta_testing」などのパッケージを使った管理も推奨されています。
Test Deployment
ここからはdbt testをする際の実践ポイントをまとめます。
packageを使用したtest
dbtのテストを効率的に実践するには以下の3つのパッケージが便利です。
パッケージを利用することでtestを自作せずともすぐに実施できます。
①dbt_utils
よく使われる汎用的な検証機能を提供します。
・条件式の検証
・一意性や非NULLチェックなど
②dbt_expectations
より細かなデータ品質の検証を提供します。
・値が指定範囲内かどうかを確認
・値が一定の標準偏差内に収まっているかの確認など
③audit_helper
モデルの変更前後の差分を比較し、影響を確認するツールです。
・クエリや列の差分比較など
これらは、packages.ymlファイルに追加し、dbt depsコマンドで導入できます。
Custom Test
dbtではオリジナルのテストを自由に作成できます。
■シンギュラーテスト
特定モデルに対して個別のSQL文で検証を行います。
testsフォルダーに特定のモデルに対する条件式SQLファイルを入れます
■カスタムジェネリックテスト
汎用的で、複数モデルに適用できる検証マクロを作成できます。
testsフォルダーにのパラーメターを記述したマクロを入れ、各モデルのymlにtestを設定します。
また、標準のdbtテスト(unique、not_nullなど)を自作したカスタムテストで上書きできます。
Test Configurations
dbtではテスト設定を細かくカスタマイズできます。
■severity(重大度):テスト失敗時の通知レベル(警告またはエラー)
■where(条件):特定の条件でテスト対象を絞る
■limit(制限数):失敗レコードの最大数を制限
■store_failures(失敗記録の保存):テストに失敗したデータをDBに保存
これら設定を活用すると、柔軟に詳細なテスト環境を構築できます。
おわりに
Advanced Testingコースを受講して、dbtのテストについて深く学びました。
実務でも役立つ内容が多く、これからの日々のデータ品質向上に役立てたいと思います。
dbtのテスト手法をぜひ取り入れて、皆さんもデータ品質の改善に取り組んでみてください。
(参考文献)
dbt Advanced testing
https://learn.getdbt.com/courses/advanced-testing
Test smarter not harder: add the right tests to your dbt project
https://docs.getdbt.com/blog/test-smarter-not-harder
Add data tests to your DAG
https://docs.getdbt.com/docs/build/data-tests