← コースに戻る
未ログインのため、この講座の進捗は記録されません。ログインすると記録が残るようになります。
カスタム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として切り出すのが基本的な考え方。