การสร้างเทสแบบ reusable

dbt ระดับกลาง

Mike Metzger

Data Engineer

Reusable test คืออะไร?

  • เทสที่นำกลับมาใช้ได้หลายสถานการณ์
  • คล้ายกับ built-in dbt test แต่ตรวจสอบเงื่อนไขได้อย่างอิสระ
  • ใช้ Jinja templating
  • บันทึกเป็นไฟล์ .sql ในโฟลเดอร์ tests/generic
  • ต้องเพิ่มเทสใน model_properties.yml สำหรับแต่ละโมเดลที่ใช้

Reusable

1 Photo by Sigmund on Unsplash
dbt ระดับกลาง

การสร้าง reusable test

{% test check_gt_0(model, column_name) %}

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

{% endtest %}
  1. บรรทัดแรก (อย่างน้อย): {% test testname(model, column_name) %}
  2. เพิ่ม SQL query โดยใช้การแทนค่าด้วย {{ object }}
  3. ปิดไฟล์ด้วย {% endtest %}
dbt ระดับกลาง

การใช้ reusable test กับโมเดล

  • เพิ่มใน model_properties.yml
  • กำหนด object ตามที่จำเป็น
  • ค่า name ของ models คือ argument ของ model
  • ค่า name ของ columns คือ argument ของ 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 ระดับกลาง

Parameter พิเศษ

  • เพิ่ม parameter พิเศษให้เทสได้
  • คล้ายกับ accepted_values และ relationships
  • เพิ่มเป็น argument ใน Jinja header
{% test check_columns_unequal(model, column_name, column_name2) %}

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

{% endtest %}
dbt ระดับกลาง

การใช้เทสที่มี parameter พิเศษ

  • กำหนดเหมือนเทสทั่วไป
  • เพิ่ม argument พิเศษไว้ใต้รายละเอียดของเทส
models:
  - name: order
    columns:
      - name: order_time
        tests:
          - check_columns_unequal:
              column_name2: shipped_time
dbt ระดับกลาง

มาฝึกกันเถอะ!

dbt ระดับกลาง

Preparing Video For Download...