Гайды
Основы dbt для трансформации данных
Модели и материализация, тесты и документация, окружения dev/prod и CI.
~9 мин чтения
Основы dbt для трансформации данных
dbt (data build tool) — SQL-трансформации в warehouse с версионированием, тестами и документацией; компилирует в views/tables/incremental модели. Оркестрация загрузки — часто Airflow — Data pipelines с Apache Airflow; SQL в курсе — тег PostgreSQL.
1. Структура проекта
models/
staging/stg_orders.sql
marts/fct_orders.sql
schema.yml # тесты и описания
dbt_project.yml
2. Материализация
view, table, incremental с уникальным ключом — выбор под объём и свежесть.
Пример слоя staging → mart (синтаксис зависит от warehouse; ниже — универсальная идея):
-- models/staging/stg_orders.sql
select
id as order_id,
cast(order_date as date) as order_date,
trim(lower(email)) as customer_email
from {{ source('raw', 'orders') }}
-- models/marts/fct_orders.sql
{{ config(materialized='incremental', unique_key='order_id') }}
select
o.order_id,
o.order_date,
c.customer_sk
from {{ ref('stg_orders') }} o
left join {{ ref('dim_customer') }} c on o.customer_email = c.email
{% if is_incremental() %}
where o.order_date > (select max(order_date) from {{ this }})
{% endif %}
{{ ref() }} и {{ source() }} строят lineage в документации dbt; не ссылайтесь на сырые таблицы напрямую из marts без staging.
3. Тесты
unique, not_null, relationships, custom tests в SQL.
4. Окружения
target: dev/prod с разными схемами/ролями; CI прогон dbt build на PR.
5. Слои: staging → marts
Staging (stg_*) — тонкий слой над сырыми таблицами: переименование, приведение типов, базовая очистка. Intermediate — при необходимости. Marts (fct_*, dim_*) — бизнес-готовые сущности для BI. Так проще тестировать и переиспользовать.
6. Macros и packages
Jinja macros для повторяющихся фрагментов SQL; dbt-utils и другие пакеты через packages.yml. Фиксируйте версии пакетов, чтобы CI не ломался от мажорного обновления.
7. Производительность
Инкрементальные модели с unique_key и окном по updated_at; избегайте full_refresh в проде без окна обслуживания. Кластеризация/сортировка таблицы — по паттерну запросов warehouse (Snowflake, BigQuery, Redshift отличаются).
8. Чек-лист
- Источники (
sources) явно описаны. - Документация
docsи lineage в dbt docs site. - Не смешивать тяжёлую бизнес-логику в одной гигантской модели.
-
--selectв CI для ускорения прогона изменённых моделей. - Политика доступа к prod target только из защищённого runner'а.
Дальше: ClickHouse: введение