データマネジメントの学校
← コースに戻る

未ログインのため、この講座の進捗は記録されません。ログインすると記録が残るようになります。

カスタムgenericテストの作成

dbtには次の4種類の組み込みgeneric testがあるが、これだけでなく独自のgeneric testを自作することもできる。

テスト検証内容
uniqueカラムの値が重複していないか
not_nullカラムにNULLが含まれていないか
accepted_valuesカラムの値が指定した候補のいずれかに収まっているか
relationships外部キーの値が参照先テーブルに存在するか

カスタムgeneric testはtests/generic/またはmacros/ディレクトリにtestブロックとして定義する。

-- tests/generic/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 %}

generic testはmodel(テスト対象のモデル)とcolumn_name(対象カラム)を引数として受け取り、SELECT文の結果が1行でも返ってきたらテスト失敗とみなされる。定義したテストはYAMLで、組み込みテストと同じように呼び出せる。

columns:
  - name: favorite_number
    data_tests:
      - is_even

同じ検証ロジックを複数のモデル・カラムで使い回したい場合に、generic testとして切り出すのが基本的な考え方。