0Pricing
SQL Academy · レッスン

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: 120

dbt-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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. DBT(Data Build Tool)の基礎
  2. SQLFluffとリンティング
  3. SQLのテスト:dbt tests、Great Expectations
  4. スキーマ変更のCI(GitHub Actions)
← SQL Academyに戻る