创建自定义可复用测试

dbt 中级

Mike Metzger

Data Engineer

什么是可复用测试?

  • 可在多种场景复用的测试
  • 类似内置 dbt 测试,但可检查任意条件
  • 使用 Jinja 模板
  • .sql 文件保存在 tests/generic 文件夹
  • 使用该测试的每个模型都需在 model_properties.yml 中添加

可复用

1 Photo by Sigmund on Unsplash
dbt 中级

创建可复用测试

{% test check_gt_0(model, column_name) %}

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

{% endtest %}
  1. 第一行(至少)为:{% test testname(model, column_name) %}
  2. 添加 SQL 查询,并用 {{ object }} 替换
  3. {% endtest %} 结束文件
dbt 中级

将可复用测试应用到模型

  • 添加到 model_properties.yml
  • 按需定义对象
  • models: name 值对应 model 参数
  • columns: name 对应 column_name 参数
version: 2

models:
  - name: taxi_rides_raw
    columns:
      - name: tpep_pickup_datetime
        tests:
          - not_null

- name: total_fare tests: - check_gt_0
dbt 中级

额外参数

  • 可为测试添加额外参数
  • 类似于 accepted_valuesrelationships
  • 作为参数写在 Jinja 头部
{% test check_columns_unequal(model, column_name, column_name2) %}

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

{% endtest %}
dbt 中级

应用含额外参数的测试

  • 定义方式与其他测试相同
  • 在测试详情下方添加额外参数
models:
  - name: order
    columns:
      - name: order_time
        tests:
          - check_columns_unequal:
              column_name2: shipped_time
dbt 中级

Passons à la pratique !

dbt 中级

Preparing Video For Download...