dbt (Data Build Tool) — это инструмент, который позволяет описывать трансформации данных с помощью SQL и управлять ими как кодом: с зависимостями, версиями, тестами и документацией. То есть dbt превращает набор SQL-запросов в полноценный пайплайн обработки данных.
dbt кажется очень простым и быстро приживается в командах. Нужно написать пару моделей, связать их через ref () — и это уже даст результат. Но дальше начинается продакшен. Моделей становится десятки, потом сотни, над проектом работают несколько человек. Источники данных меняются, бизнес начинает опираться на цифры и спрашивать за них. И если просто «писать SQL в dbt», довольно быстро появляются проблемы, например:
Поэтому важно отдельно говорить про dbt в продакшене. Не про команды и не про синтаксис, а про то, как им пользоваться так, чтобы проект не разваливался при росте, а данные оставались надёжными.
Когда моделей становится больше десятка, начинается хаос. Поэтому важно заранее выстроить архитектуру, иначе проект быстро превратится в набор SQL-файлов, в котором сложно ориентироваться. Классическая структура такая: staging → intermediate → marts. Главная её идея — разделить модели по слоям и ответственности.
select
id as user_id,
created_at::timestamp as created_at,
lower(email) as email
from {{ source('raw', 'users') }}
select
user_id,
count(*) as orders_count
from {{ ref('stg_orders') }}
group by user_id
В dbt модели — это основа. Именно от того, как они устроены, зависит, будет ли проект в продакшене устойчивым или превратится в набор случайных SQL-запросов. Вот несколько практик:
В dbt тестирование встроено «из коробки», и начать можно очень быстро. Вот несколько вариантов.
Любой человек в команде должен быстро понять, что делает модель и какие данные в ней лежат. Без этого начинаются бесконечные вопросы, догадки и ошибки в использовании данных.
В dbt документация — это часть кода. Она живёт рядом с моделями в schema.yml и развивается вместе с ними. Описания моделей и колонок обновляются в том же процессе, что и сама логика.
Плюс у dbt есть удобный слой визуализации — dbt docs. Он показывает зависимости и описания в одном месте. В продакшене это превращается в карту данных: можно открыть модель, посмотреть, откуда она берётся и кто от неё зависит.
Как только в проекте появляется несколько человек и регулярные обновления, нужен предсказуемый процесс доставки изменений. Обычно всё строится вокруг пайплайна: разработка → pull request → CI → продакшен. Разработчик вносит изменения, открывает PR, и дальше автоматически запускаются проверки: собираются зависимости, выполняются только изменённые модели, прогоняются тесты. Если что-то падает — изменения не попадают в прод.
Сам деплой — это не только код, но и окружения. Минимум — dev и prod, но на практике часто добавляют staging. Так можно проверить изменения на данных до выката. Запуск в продакшене обычно происходит по расписанию через Airflow, dbt Cloud или другой оркестратор.
Даже если в проекте есть тесты и аккуратный деплой, это ещё не гарантия, что всё всегда будет работать идеально. В продакшене также важно следить за системой в процессе работы.
Сначала идёт технический мониторинг. Нужно проверить, успешно ли отработали джобы, сколько времени заняло выполнение, не упали ли модели или тесты. Если пайплайн не отработал, об этом должны узнать сразу. Поэтому алёрты в Airflow, dbt Cloud или другой системе — это обязательная часть продакшена.
Дальше — контроль самих данных. Даже если тесты проходят, данные могут «поехать». Например, резко упал объём событий, в десять раз выросло количество заказов, изменилось распределение значений. Такие вещи тестами не всегда поймать, поэтому важно отслеживать объёмы таблиц, динамику метрик и базовые аномалии.
Читать также: