dbt com Python
dbt gerencia transformações de warehouse como modelos versionados - principalmente SQL, com modelos Python onde os adaptadores permitem lógica estilo pandas/polars no runtime do warehouse.
Busque em todas as páginas da documentação
dbt gerencia transformações de warehouse como modelos versionados - principalmente SQL, com modelos Python onde os adaptadores permitem lógica estilo pandas/polars no runtime do warehouse.
Cartão de receita de referência rápida - pronto para copiar e colar.
# models/staging/stg_orders.sql
select
order_id,
cast(revenue as double) as revenue,
region,
ordered_at
from {{ source('raw', 'orders') }}
where order_id is not null# models/marts/revenue_by_region.py (modelo Python dbt)
def model(dbt, session):
df = dbt.ref("stg_orders").to_pandas()
return df.groupby("region", observed=True)["revenue"].sum().reset_index()Quando usar isso:
dbt build em cada PR-- models/staging/stg_orders.sql
with source as (
select * from {{ source('ecommerce', 'orders') }}
),
cleaned as (
select
order_id,
upper(trim(region)) as region,
cast(revenue as numeric(18, 2)) as revenue,
ordered_at::timestamp_tz as ordered_at
from source
where revenue >= 0
)
select * from cleaned# models/staging/schema.yml
models:
- name: stg_orders
columns:
- name: order_id
tests: [unique, not_null]
- name: revenue
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0-- models/marts/fct_revenue_daily.sql
select
date_trunc('day', ordered_at) as revenue_date,
region,
sum(revenue) as total_revenue,
count(*) as order_count
from {{ ref('stg_orders') }}
group by 1, 2O que isso demonstra:
source e refview, table, incremental).ref() - dbt build executa testes após a construção do modelo.manifest.json, catalog.json para ferramentas de linhagem.| Camada | Papel |
|---|---|
| staging | Renomear, converter tipo, limpeza leve |
| intermediate | Junções de negócios |
| marts | Fatos/dimensões voltados para o consumidor |
# Mantenha os modelos Python enxutos - o trabalho pesado ainda pertence ao SQL quando possível
def model(dbt, session):
import pandas as pd
orders = dbt.ref("stg_orders")
pdf = orders.to_pandas() if hasattr(orders, "to_pandas") else orders
# engenharia de recursos ...
return pdfunique/not_null em chaves primárias no mínimo.incremental_strategy e chaves únicas.target perfis dev/prod via variáveis de ambiente.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Stored procs SQL Puros | Equipe de operações nativa do warehouse | Quer fluxo de trabalho de PR git e testes |
| Scripts pandas | Transformações em escala de laptop | Warehouse é a fonte da verdade |
| Spark/dbt-spark | Transformações em cluster enormes | Marts SQL são suficientes |
| SQLMesh | Precisa de ambientes virtuais por branch | Equipe já usa dbt Cloud |
dbt debug && dbt build --select stg_orders+is_incremental() no modelo.description em schema.yml fluem para o site de documentação do dbt.tests:
- relationships:
to: ref('dim_customers')
field: customer_iddbt-core local com arquivos de lock uv.pii em metadados YAML.models/ vive ao lado do app - job de CI separado para dbt build.Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026