Короткий ответ
dbt превращает набор SQL-скриптов в управляемый проект с явными зависимостями между моделями (через ref()), версионированием, автогенерацией документации и графа зависимостей, а встроенные тесты позволяют автоматически проверять качество данных (уникальность, отсутствие NULL, ссылочную целостность) при каждом запуске.
Как это работает подробнее
- Как это работает: вместо того чтобы вручную помнить порядок запуска SQL-скриптов, в dbt каждая модель — это SELECT-запрос, ссылающийся на другие модели через
{{ ref('model_name') }}; dbt строит граф зависимостей (DAG) и запускает модели в правильном порядке, материализуя их как таблицы или представления.
Пример кода
schema.yml
# models/staging/schema.yml
models:
- name: stg_orders
columns:
- name: order_id
tests:
- unique
- not_null
- name: customer_id
tests:
- relationships:
to: ref('stg_customers')
field: customer_idЧто использовать на практике
- На практике: тесты описываются декларативно в YAML (
not_null,unique,relationships,accepted_values) и запускаются командойdbt test, что позволяет ловить проблемы с данными до того, как на них построят отчёт; документация и граф зависимостей (dbt docs generate) помогают новым участникам команды понять, откуда берётся каждая таблица. - Пример и проверка. Запуск dbt test упадёт, если в stg_orders появится заказ с customer_id, которого нет в stg_customers — это сигнал о проблеме целостности данных ещё до того, как она попадёт в итоговый дашборд.
Подводные камни
- Частые ошибки: писать в dbt-моделях логику, которая зависит от порядка запуска скриптов руками (например, подразумевать, что предыдущая модель уже посчитана, без явного
ref()); не добавлять тесты вообще, считая dbt просто «ещё одним способом хранить SQL», из-за чего теряется основное преимущество — автоматический контроль качества.