Створення власних багаторазових тестів

Середній рівень dbt

Mike Metzger

Data Engineer

Що таке багаторазовий тест?

  • Тест, який можна повторно використовувати в різних випадках
  • Як вбудований тест dbt, але може перевіряти будь-яку умову
  • Використовує шаблони Jinja
  • Зберігається як файл .sql у папці проєкту tests/generic
  • Потрібно додати тест до model_properties.yml для кожної моделі, що його використовує

Багаторазовий

1 Фото: Sigmund на 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_values та relationships
  • Додайте як аргументи в заголовок 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...