Creating custom reusable tests

우상욱·2024년 3월 2일
0

DBT

목록 보기
9/16

What is a reuseable test?


DBT 용어로 일반 테스트라고도 하는 재사용 가능 테스트는 여러 상황에서 재사용할 수 있는 테스트입니다.

  • A test that can be reused in multiple situations
  • Much like a built-in dbt test, but can check any conditions
    SQL로 가능한 모든 테스트를 구현할 수 있습니다.
  • Users Jinja templateing
  • Saved as a .sql file in the tests/generic project folder
  • Much add test to the model_properties.yml for each model that uses it
    reusable test는 사용하려는 모델에 정의되어 있어야합니다. dbt 내장 테스트 방식을 사용하는 것과 같습니다.

Creating a reusable test


  • Add {% test testname(model, column_name) % }
    대부분의 일반 테스트에서는 model과 column_name이라는 두 개체를 대체
    이는 테스트 이름이 되는 Jinja 함수에 대한 인수로 처리

  • Add SQL query, with {{ object }} substitutions
    모델 인수를 테이블에 대한 Jinja 참조로 대체합니다.
    유효성 검사를 위한 참조로 사용되는 column_name 인수는 일반적으로 where 절에 있습니다.

  • End the file with {% endtest %}

{% test check_gt_0(model, column_name) %}

select *
from {{ model }}
where {{ column_name }} > 0

{% endtest %}

Applying reusable test to model


  • Add to model_properties.yml
  • Define the objects as necessary
  • The models: name value is the model argument
  • The columns: name argument is the column_name argument
version: 2
models:
  - name: taxi_rides_raw
    columns:
      - name: tpep_pickup_datetime
        tests:
          - not_null
      - name: total_fare
        tests:
          - check_gt_0

Extra parameters


  • Can add extra parameters to the test
  • Similar to accepted_values and relationships
  • Add as arguments to the Jinja header
    파라미터를 여러 개 추가할 수 있지만, 필수 파라미터는 적게 유지하는 것이 좋습니다.
{% test check_columns_unequal(model, column_name, column_name2) %}

select * from {{ model }}
where {{ column_name }} = {{ column_name2 }}

{% endtest %}

Applying extra parameters tests

  • Define like other tests
  • Add the extra arguments below the test details
models:
  - name: order
    columns:
     - name: order_time
       tests:
         - check_columns_unequal:
             column_name2: shipped_time

Reusable VS Singular


profile
데이터엔지니어

0개의 댓글