severity, error_if и warn_if
Тесты возвращают количество неудач — чаще всего это количество строк, возвращаемых запросом теста, но это может быть и пользовательский расчет. Как правило, если количество неудач не равно нулю, тест возвращает ошибку. Это логично, так как тестовые запросы предназначены для возврата всех строк, которые вы не хотите видеть: дублирующиеся записи, нулевые значения и т.д.
Можно настроить тесты так, чтобы они возвращали предупреждения вместо ошибок, или сделать статус теста условным в зависимости от количества неудач. Возможно, 1 дублирующая запись может считаться предупреждением, но 10 дублирующих записей должны считаться ошибкой.
Соответствующие настройки:
severity:errorилиwarn(по умолчанию:error)error_if: условное выражение (по умолчанию:!=0)warn_if: условное выражение (по умолчанию:!=0)
Условные выражения могут быть любой логикой сравнения, поддерживаемой вашим SQL-синтаксисом с целым числом неудач: > 5, = 0, between 5 and 10 и так далее.
Вот как это работает на практике:
- Если
severity: error, dbt сначала проверит условиеerror_if. Если условие ошибки выполнено, тест возвращает ошибку. Если оно не выполнено, dbt затем проверит условиеwarn_if(по умолчанию!=0). Если оно не указано или условие предупреждения выполнено, тест выдает предупреждение; если не выполнено, тест проходит. - Если
severity: warn, dbt полностью пропустит условиеerror_ifи сразу перейдет к условиюwarn_if. Если условие предупреждения выполнено, тест выдает предупреждение; если не выполнено, тест проходит.
По умолчанию тест с severity: warn будет возвращать только предупреждение и не приведёт к ошибке. Однако вы можете повысить уровень предупреждений до ошибок, используя:
--warn-error: Повышает все предупреждения dbt (включая предупреждения тестов, предупреждения Jinja, сообщения об устаревании и т. д.) до уровня ошибок.--warn-error-options: Повышает до уровня ошибок только определённые типы предупреждений.
Подробнее см. в разделе Warnings.
- Готовые универсальные тесты
- Единичные тесты
- Пользовательские универсальные тесты
- Уровень проекта
Настройка конкретного экземпляра готового универсального теста:
models:
- name: large_table
columns:
- name: slightly_unreliable_column
data_tests:
- unique:
config:
severity: error
error_if: ">1000"
warn_if: ">10"
Настройка единичного теста:
{{ config(error_if = '>50') }}
select ...
Установка значения по умолчанию для всех экземпляров пользовательского универсального теста, путем настройки внутри блока теста (определение):
{% test <testname>(model, column_name) %}
{{ config(severity = 'warn') }}
select ...
{% endtest %}
Установка значения по умолчанию для всех тестов в пакете или проекте:
data_tests:
+severity: warn # все тесты
<package_name>:
+warn_if: >10 # тесты в <package_name>