Documentation
🛠️ dbt (data build tool)
Теория про dbt

Что такое dbt

dbt — это инструмент для трансформации данных внутри базы. То есть вы грузите сырые данные (EL), а dbt делает T — превращает их в удобные таблицы и витрины.

Проще:

  • EL — загрузили сырые данные в staging
  • T — dbt превращает их в витрины и метрики

Кому и зачем

dbt нужен, когда:

  • есть много SQL-трансформаций
  • нужна прозрачная логика и история изменений
  • важно качество данных и документация

Что даёт dbt:

  • разбиение логики на модели (DRY)
  • тесты качества данных
  • автодокументация и lineage
  • стандартизацию работы команды

Что нужно знать перед стартом

  • базовый SQL
  • git
  • установленный Python

Как выглядит dbt в жизни

dbt — это папка с SQL-моделями и конфигами.
Каждая модель — обычный SQL, но с ссылками на другие модели через ref().

Пример очень простой модели:

select
  customer_id,
  count(*) as orders_cnt
from {{ ref('stg_orders') }}
group by 1

Вот так dbt связывает модели в граф, строит зависимости и запускает всё по порядку.


Основные команды dbt

dbt run      # выполняет модели
dbt test     # запускает тесты
dbt seed     # загружает csv
dbt build    # seed + run + test
dbt docs     # генерация документации

Полезные флаги:

-s     выбрать модели
-f     пересоздать инкрементальные
-d     debug-логи
-t     выбрать target (dev/prod)

Базовые термины

Проект

Папка с dbt_project.yml. В нём настройки путей, моделей и профиля подключения.

Profile

Подключение к базе (profiles.yml). Обычно есть dev, test, prod.

Модель

SQL-файл, из которого dbt создаёт таблицу или view.

Материализация

Способ, как модель хранится:

  • view — представление
  • table — таблица
  • incremental — догружается только новое

Пример:

{{ config(materialized='table') }}
select * from ...

Seed

CSV-файлы, которые dbt загружает в базу. Часто справочники.

Sources

Внешние таблицы, созданные не dbt.

Пример:

select *
from {{ source('raw', 'orders') }}

Ref

Ссылка на другую модель:

select * from {{ ref('stg_customers') }}

Тесты в dbt

Базовые тесты:

  • unique
  • not_null
  • relationships
  • accepted_values

Описываются в .yml рядом с моделями.


Документация и Lineage

dbt строит граф зависимостей (lineage). Его можно смотреть в dbt docs serve.


Когда dbt особенно полезен

  • много SQL-трансформаций
  • нужно контролировать качество
  • важна прозрачность пайплайна
  • команда работает параллельно

Итог

dbt — это стандарт для трансформаций в аналитических БД. Он упорядочивает SQL, даёт тесты, документацию и понятный пайплайн.


Почему dbt, а не просто SQL

SQL сам по себе не даёт:

  • управления зависимостями между запросами,
  • тестов качества,
  • документации,
  • запуска всего пайплайна одной командой.

dbt решает это «надстройкой» над SQL:

  • вы пишете всё тем же SQL,
  • dbt сам строит порядок выполнения,
  • легко масштабировать проект и команду.

По сути, dbt превращает набор SQL-скриптов в поддерживаемый продукт.