Перейти к основному содержимому

Настройка `severity` теста

Тесты возвращают количество неудач — чаще всего это количество строк, возвращаемых запросом теста, но это может быть и пользовательский расчет. Как правило, если количество неудач не равно нулю, тест возвращает ошибку. Это логично, так как тестовые запросы предназначены для возврата всех строк, которые вы не хотите видеть: дублирующиеся записи, нулевые значения и т.д.

Можно настроить тесты так, чтобы они возвращали предупреждения вместо ошибок, или сделать статус теста условным в зависимости от количества неудач. Возможно, 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. Если условие предупреждения выполнено, тест выдает предупреждение; если не выполнено, тест проходит.

Обратите внимание, что статусы предупреждений теста будут возвращать ошибки, если передан флаг --warn-error. Если dbt не указано обрабатывать предупреждения как ошибки, тест с серьезностью warn никогда не вернет ошибку.

Настройка конкретного экземпляра готового универсального теста:

models/<filename>.yml
version: 2

models:
- name: large_table
columns:
- name: slightly_unreliable_column
tests:
- unique:
config:
severity: error
error_if: ">1000"
warn_if: ">10"
0