Создание пользовательских многоразовых тестов

Средний уровень dbt

Mike Metzger

Data Engineer

Что такое многоразовый тест?

  • Тест, который можно повторно использовать в разных ситуациях
  • Похож на встроенный тест dbt, но может проверять любое условие
  • Использует шаблонизатор Jinja
  • Сохраняется как файл .sql в папке tests/generic проекта
  • Необходимо добавить тест в model_properties.yml для каждой модели, которая его использует

Многоразовое использование

1 Фото: 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_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...