Учебник dbt для начинающих
dbt (data build tool) — инструмент, который превратил написание SQL-трансформаций в инженерную дисциплину: с версионированием, тестами, документацией и автоматическим графом зависимостей. Этот курс — для тех, кто пишет SQL в хранилище данных и хочет перестать поддерживать хаос из разрозненных скриптов. Вы узнаете, что такое аналитическая инженерия и роль analytics engineer, почему трансформации переехали внутрь хранилища (ELT вместо ETL), как устроены модели, материализации и инкрементальная загрузка, как строить слои staging→intermediate→marts, писать тесты данных, генерировать документацию, делать снапшоты истории и выстраивать CI/CD. В конце — сквозной пример: пайплайн витрин из сырых данных.
Курс «dbt: аналитическая инженерия данных» состоит из 9 разделов и 24 уроков: Что такое аналитическая инженерия и dbt, Установка, подключение и первая модель, ref(), source() и граф зависимостей, Материализации и инкрементальные модели, Слои моделирования и Jinja, Тесты, документация и качество данных, Seeds, snapshots и пакеты, Конфигурация, окружения и оркестрация и CI/CD, хранилища и реальный пример. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Что такое аналитическая инженерия и dbt
- Аналитическая инженерия: новая роль в данных
Кто такой analytics engineer, чем он отличается от data engineer и аналитика и почему эта роль выделилась в отдельную.
- Проблема, которую решает dbt
SQL-хаос без тестов, версионирования и документации: какие конкретные боли трансформаций данных закрывает dbt.
- ELT против ETL: почему трансформации в хранилище
Разница ETL и ELT, почему современные хранилища позволяют трансформировать данные на месте и почему dbt — это буква T.
- Аналитическая инженерия: новая роль в данных
2 Установка, подключение и первая модель
- dbt Core против dbt Cloud и установка
Разница между бесплатным dbt Core (CLI) и платным dbt Cloud, как установить dbt и адаптер к хранилищу.
- profiles.yml: подключение к хранилищу
Как настроить profiles.yml для подключения dbt к хранилищу: цели dev/prod, хост, схема, пароли через переменные окружения.
- Первая модель: model = SELECT
Что такое модель в dbt: обычный SELECT в .sql-файле, который dbt превращает в таблицу или представление.
- dbt Core против dbt Cloud и установка
3 ref(), source() и граф зависимостей
- ref() и автоматический DAG
Функция ref() связывает модели, dbt строит DAG и сам определяет порядок запуска — главная идея инструмента.
- source(): объявление источников
Функция source() в dbt: как объявлять сырые внешние таблицы в YAML и ссылаться на них вместо хардкода.
- ref() и автоматический DAG
4 Материализации и инкрементальные модели
- Материализации: view, table, ephemeral
Три базовые материализации dbt — view, table и ephemeral: чем отличаются и когда какую выбирать.
- Инкрементальные модели: только новые данные
Инкрементальные модели dbt: как обрабатывать только новые строки больших таблиц через is_incremental и unique_key.
- Материализации: view, table, ephemeral
5 Слои моделирования и Jinja
- Слои: staging → intermediate → marts
Общепринятый паттерн слоёв моделей dbt: staging (чистка), intermediate (бизнес-логика), marts (витрины).
- Jinja: шаблонизатор поверх SQL
Jinja в dbt: переменные, циклы и условия превращают статичный SQL в динамический и переиспользуемый код.
- Макросы и пакет dbt_utils
Макросы dbt как функции для переиспользования SQL и готовые макросы из пакета dbt_utils.
- Слои: staging → intermediate → marts
6 Тесты, документация и качество данных
- Встроенные тесты: unique, not_null и другие
Четыре встроенных теста dbt — unique, not_null, accepted_values, relationships — как качество данных в коде.
- Кастомные и singular-тесты
Свои тесты в dbt: singular-тесты как SQL-запрос и переиспользуемые generic-тесты для качества данных.
- Документация и dbt docs
Документация моделей в dbt: descriptions в YAML, команда dbt docs и интерактивный граф зависимостей (lineage).
- Встроенные тесты: unique, not_null и другие
7 Seeds, snapshots и пакеты
- Seeds: статичные данные из CSV
Seeds в dbt: как загружать небольшие статичные справочники из CSV-файлов в хранилище под версионным контролем.
- Snapshots: история изменений (SCD type 2)
Snapshots в dbt реализуют SCD type 2: сохраняют историю изменений строк источника с интервалами действия.
- Seeds: статичные данные из CSV
8 Конфигурация, окружения и оркестрация
- dbt_project.yml: конфигурация и теги
Главный конфиг dbt_project.yml: материализации по папкам, теги моделей и иерархия настроек проекта.
- Запуск и выбор: run, test, build, --select
Команды dbt run, test, build и синтаксис --select с графовыми операторами для выборочного запуска моделей.
- Окружения dev/prod и dbt в Airflow
Разделение окружений dev/prod через targets и запуск dbt из Airflow как часть ELT-оркестрации.
- dbt_project.yml: конфигурация и теги
9 CI/CD, хранилища и реальный пример
- CI/CD для dbt: slim CI и проверки в PR
CI/CD для dbt: проверка изменённых моделей в pull request (slim CI) через state:modified и хуки.
- Хранилища, адаптеры, хуки и операции
Адаптеры dbt под Snowflake/BigQuery/Redshift/Postgres/ClickHouse, хуки (pre/post) и операции (run-operation).
- Best practices и реальный пример витрин
Лучшие практики dbt (нейминг, слои, идемпотентность, DRY), типичные ошибки и сквозной пример пайплайна витрин.
- CI/CD для dbt: slim CI и проверки в PR