業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【データ基盤】
データハブとは
Ajust
データの保守運用
AI

執筆者:Handbook編集部

dbtのテスト

dbt のテスト

この記事では、dbt のテストについて紹介します。

dbt test

dbt では、dbt testを実行することでプロジェクト内の各テストの合否が表示されます。テストを定義する方法は以下の 2 種類があります。

  • Singular test
    • レコードの取得の成否を調べるクエリ
  • Generic test
    • 引数を受け取るパラメトリッククエリ

Singular tests

Singular tests は.sqlファイルで定義され、testsディレクトリに置きます。

sales というテーブルがあり、amount がポジティブの値であるかどうかをテストしたい場合は以下のような SQL を記述します。

-- tests/assert_amount_is_positive.sql

select
    order_id,
    sum(amount)
from {{ ref('sales' )}}
group by 1
having not(amount >= 0)

Generic tests

Generic tests は、汎用的で再利用が可能です。tests/generic/ディレクトリもしくはmacros/ディレクトリに jinja を使った.sqlファイルを置きます。

-- tests/generic/test_is_even.sql

{% test is_even(model, column_name) %}

with validation as (
    select
        {{ column_name }} as even_field
    from {{ model }}
),
validation_errors as (
    select even_field
    from validation
    where (even_field % 2) = 1
)
select *
from validation_errors

{% endtest %}

データモデルのファイルと同じ階層に.ymlファイルを作成し、以下のようにtestsセクションにテスト名を記述します。

version: 2

models:
  - name: users
    columns:
      - name: favorite_number
        tests:
          - is_even

unique、 not_null、 accepted_values、 relationships

dbt では、unique、not_null、accepted_values、relationships の 4 つの一般的なテストがすでに定義されています。

  • unique
    • カラムがユニークであるかどうか
  • not_null
    • カラムに NULL 値が存在しないかどうか
  • accepted_values
    • カラムの値が指定した値になっているかどうか
  • relationships
    • 参照整合性を満たしているかどうか

例えば以下のように.ymlファイルに記述します。

version: 2

models:
  - name: orders
    columns:
      - name: order_id
        tests:
          - unique
          - not_null
      - name: status
        tests:
          - accepted_values:
              values: ["shipped", "completed", "returned"]
      - name: customer_id
        tests:
          - relationships:
              to: ref('customers')
              field: id

参考

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年07月06日に最終更新
読み込み中...