建立自訂可重複使用的測試

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 中級

一起來練習吧!

dbt 中級

Preparing Video For Download...