SQLのテスト:dbt tests、Great Expectations
dbt(unique、not_null、accepted_values)でデータ品質テストを作成し、Great Expectationsでより豊富なアサーションを記述します。
「SQLのテスト:dbt tests、Great Expectations」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
SQLをテストする理由
不正なデータは、悪い意思決定を引き起こすまで見えないことがあります。テストによって次の問題を検出できます。
- スキーマのドリフト(列の削除、型の変更)
- データ品質(禁止されている箇所のNULL、重複、範囲外の値)
- 参照整合性の問題(孤立した行)
- ビジネス上の不変条件(revenue ≥ 0、合計値の整合性)
dbtテスト:組み込みテスト
YAMLで列ごとに宣言します。
# models/orders.yml
version: 2
models:
- name: orders
columns:
- name: id
tests:
- unique
- not_null
- name: user_id
tests:
- not_null
- relationships:
to: ref('users')
field: id
- name: status
tests:
- accepted_values:
values: ['pending', 'paid', 'cancelled']dbtテストの実行
すべてのテストを実行します。
dbt test
dbt test --select orders
dbt build # = run + testカスタムSingularテスト
テストとは、失敗時に行を返すSELECTにすぎません。
-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0ジェネリックテスト
複数の列で再利用できるパラメーター化されたテストです。
-- tests/generic/test_in_range.sql
{% test in_range(model, column_name, min, max) %}
SELECT * FROM {{ model }}
WHERE {{ column_name }} < {{ min }} OR {{ column_name }} > {{ max }}
{% endtest %}
-- Use it in YAML:
columns:
- name: age
tests:
- in_range:
min: 0
max: 120dbt-utilsパッケージ
一意な組み合わせ、expression_is_true、equal_rowcountなど、より多くのテストを追加します。
- dbt_utils.expression_is_true:
expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
compare_model: ref('staging_orders')Great Expectations
より大規模な代替手段です。豊富な期待値ライブラリと詳細なレポートを備えたPythonフレームワークです。
import great_expectations as ge
suite = context.add_or_update_expectation_suite('orders')
batch = context.get_validator(batch_request, expectation_suite_name='orders')
batch.expect_column_values_to_not_be_null('id')
batch.expect_column_values_to_be_between('total', 0, 10000)
results = context.run_checkpoint('orders_checkpoint')使い分け
- dbtテスト — すでにdbtを使っている場合の第一候補です。軽量で、SQLだけで完結します
- Great Expectations — 詳細なレポート、より幅広いアサーション、SQL以外の形式(CSV/parquet)が必要な場合に適しています
テストの重大度
dbt 1.0以降では、warnとerrorの重大度をサポートしています。
- accepted_values:
values: [...]
config:
severity: warn
warn_if: ">100"
error_if: ">1000"CIとの統合
すべてのPRでテストを実行し、失敗時にはマージをブロックします。
# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
run: echo "::error::dbt tests failed"データ品質ダッシュボード
dbt-utils、dbt-expectations、Elementaryを組み合わせると、テスト結果をGrafana / Lookerのダッシュボードに変換できます。
スキーマテストと行テスト
dbtの列型の「snapshot」でスキーマのリグレッションを検出し、行テストでデータのバグを検出します。
まとめ
テストによって、SQLは「信じてください」から「検証済み」に変わります。
- 宣言的でデータウェアハウス内で実行できるdbtテスト
- より幅広く詳細な検証にはGreat Expectations
- CIで実行し、失敗時にはブロック
- 結果を継続的に追跡
確認問題
いずれかの行でtotal < 0になった場合に失敗するdbtテストが必要です。最も簡単な方法は何ですか。
よくある質問
「SQLのテスト:dbt tests、Great Expectations」レッスンは無料ですか?
はい。「SQLのテスト:dbt tests、Great Expectations」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「SQLのテスト:dbt tests、Great Expectations」で何を学びますか?
dbt(unique、not_null、accepted_values)でデータ品質テストを作成し、Great Expectationsでより豊富なアサーションを記述します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「SQLのテスト:dbt tests、Great Expectations」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DBT(Data Build Tool)の基礎
- SQLFluffとリンティング
- SQLのテスト:dbt tests、Great Expectations
- スキーマ変更のCI(GitHub Actions)