Короткий ответ
Единственного правильного решения нет: нужно сочетать понятный git-workflow (feature-branch + pull request), обязательное код-ревью с чек-листом, автоматические проверки в CI (SQL-линтер, dbt test, проверка компиляции моделей) и соразмерную строгость процесса — слишком тяжёлый процесс замедлит команду, слишком лёгкий не поймает ошибки.
Как это работает подробнее
- Как это работает: CI-пайплайн на каждый pull request может автоматически прогонять линтер SQL (например, sqlfluff), собирать dbt-проект (
dbt compile) и запускать тесты (dbt test) на отдельной тестовой схеме, что ловит очевидные ошибки до ревью человеком; код-ревью человеком дополнительно проверяет бизнес-логику, читаемость и соответствие соглашениям команды.
Пример кода
ci.yml
on: pull_request
jobs:
checks:
steps:
- run: sqlfluff lint models/ --dialect postgres
- run: dbt compile
- run: dbt test -s state:modified+ --defer --state ./prod-manifestЧто использовать на практике
- На практике: важно определить, какие проверки обязательны (блокируют merge) — например, падение
dbt testна critical-моделях — а какие носят рекомендательный характер (стиль кода); нужно задать владельцев (CODEOWNERS) для критичных моделей, чтобы ревью проходил человек, разбирающийся в конкретном домене, а не случайный коллега. - Пример и проверка. Возможная конфигурация CI (GitHub Actions, псевдокод): Проверка выбранного баланса: раз в квартал смотреть метрику — число инцидентов с некорректными метриками в проде и среднее время прохождения PR; если инцидентов мало, а PR «залипают» на днях — процесс слишком тяжёлый; если PR проходят быстро, но регулярно случаются инциденты — процесс слишком лёгкий.
Подводные камни
- Частые ошибки: внедрить слишком много обязательных проверок сразу, что замедляет команду и вызывает сопротивление; требовать ревью от всех 8 человек на каждый PR вместо 1–2 релевантных ревьюеров; не разделять модели по критичности (core-метрики для топ-менеджмента vs вспомогательные вью), из-за чего для мелких правок требуется такой же тяжёлый процесс, как для критичных моделей.