🔨 dbt Cheat Sheet

📄 Documentação Oficial do dbt

# Comando / Função Descrição Exemplo
1pip install dbt-coreInstala o motor principal do dbtpip install dbt-core
2pip install dbt-postgresInstala o conector para PostgreSQLpip install dbt-postgres
3pip install dbt-snowflakeInstala o conector para Snowflakepip install dbt-snowflake
4pip install dbt-bigqueryInstala o conector para BigQuerypip install dbt-bigquery
5pip install dbt-redshiftInstala o conector para Redshiftpip install dbt-redshift
6dbt initCria a estrutura de pastas de um novo projetodbt init analytics_v1
7dbt debugTesta a conexão e valida o arquivo profiles.ymldbt debug
8dbt depsBaixa pacotes externos (como dbt_utils)dbt deps
9dbt cleanApaga as pastas dbt_packages e logsdbt clean
10dbt --versionVerifica as versões instaladasdbt --version
11dbt runCompila e executa modelos no bancodbt run
12dbt testRoda testes de integridade e dadosdbt test
13dbt seedCarrega CSVs da pasta /seeds para o bancodbt seed
14dbt buildExecuta run, test, seed e snapshot em ordemdbt build
15dbt snapshotRoda capturas de histórico (SCD Type 2)dbt snapshot
16dbt docs generateGera o catálogo de documentação JSONdbt docs generate
17dbt docs serveInicia site local com o grafo de linhagemdbt docs serve
18dbt compileConverte Jinja para SQL puro sem rodardbt compile
19dbt listLista todos os recursos do projetodbt ls
20dbt parseAnalisa o projeto apenas para ver erros de sintaxedbt parse
21dbt source freshnessVerifica o atraso das tabelas de origemdbt source freshness
22dbt run-operationExecuta uma macro específica manualmentedbt run-operation my_macro
23dbt showMostra prévia do resultado de um modelodbt show --select stg_users
24dbt retryExecuta apenas o que falhou na rodada anteriordbt retry
25dbt run --full-refreshRecria tabelas incrementais do zerodbt run --full-refresh
26--select model_nameFiltra por um modelo específicodbt run -s orders
27--select path.to.modelsRoda todos os modelos de uma pastadbt run -s models/marts
28--select model+Roda o modelo e todos os filhos deledbt run -s users+
29--select +modelRoda o modelo e todos os pais deledbt run -s +orders
30--select @modelRoda o modelo, pais, filhos e dependentes indiretosdbt run -s @orders
31--exclude modelRoda tudo exceto o modelo citadodbt run --exclude heavy_model
32--select tag:financeRoda modelos marcados com uma tagdbt run -s tag:finance
33--select config.materialized:tableFiltra por tipo de materializaçãodbt run -s config.materialized:table
34--select source:my_src+Roda tudo que depende de uma fonte específicadbt run -s source:erp+
35--select state:modifiedRoda apenas o que foi alterado (Git)dbt run -s state:modified
36--target prodMuda o ambiente de execuçãodbt run -t prod
37--vars '{"key": "val"}'Passa variáveis para o código via CLIdbt run --vars '{"date": "2023-01-01"}'
38--threads 8Define o número de consultas paralelasdbt run --threads 8
39--fail-fastPara tudo no primeiro erro encontradodbt run --fail-fast
40--quietReduz a saída de log no terminaldbt run --quiet
41{{ ref('') }}Referencia outro modelo dbtfrom {{ ref('stg_sales') }}
42{{ source('', '') }}Referencia uma tabela bruta (Source)from {{ source('raw', 'logs') }}
43{{ config() }}Define propriedades do modelo{{ config(materialized='view') }}
44{{ var('') }}Usa variável definida no dbt_project.ymlwhere dt > '{{ var("start_date") }}'
45{{ env_var('') }}Busca valor do sistema operacional{{ env_var('DB_PASSWORD') }}
46{% set var = ... %}Cria variável local no arquivo{% set total = 100 %}
47{% if ... %}{% endif %}Bloco condicional Jinja{% if target.name == 'dev' %}
48{% for i in ... %}Loop para repetir código SQL{% for col in ['id', 'name'] %}
49{{ target.name }}Retorna o nome do perfil ativo{{ target.name }}
50{{ target.schema }}Retorna o schema padrão atual{{ target.schema }}
51{{ this }}Refere-se ao nome da própria tabela atualinsert into {{ this }}
52is_incremental()Checa se é uma rodada incremental{% if is_incremental() %}
53{{ log("msg") }}Escreve no console durante a compilação{{ log("Rodando...", info=True) }}
54{{ return() }}Retorna um valor em uma macro{{ return(my_val) }}
55{% macro name() %}Inicia definição de uma função reutilizável{% macro grant_select() %}
56adapter.dispatch()Escolhe macro baseada no tipo de banco{{ adapter.dispatch('macro_name')() }}
57run_query()Executa SQL e traz os dados para o Jinja{% set res = run_query(sql) %}
58executeFlag que indica se o dbt está em execução{% if execute %}
59exceptions.raise_compiler_errorGera erro e para o processo{{ exceptions.raise_compiler_error("Erro!") }}
60{{ doc('') }}Importa descrição de um arquivo markdowndescription: '{{ doc("orders_doc") }}'
61materialized='table'Cria uma tabela físicaconfig(materialized='table')
62materialized='view'Cria uma visão lógicaconfig(materialized='view')
63materialized='incremental'Apenas anexa novos dadosconfig(materialized='incremental')
64materialized='ephemeral'Vira uma CTE em outros modelosconfig(materialized='ephemeral')
65unique_keyDefine chave para update incrementalunique_key='id'
66incremental_strategyEstratégia: merge, delete+insert ou appendincremental_strategy='merge'
67on_schema_changeComo lidar com colunas novas no incrementalon_schema_change='fail'
68pre_hookSQL que roda ANTES do modelopre_hook="sql_aqui"
69post_hookSQL que roda DEPOIS do modelopost_hook="grant select..."
70aliasMuda o nome da tabela no banco finalconfig(alias='vendas_final')
71schemaDefine um schema específico para o modeloconfig(schema='marketing')
72databaseDefine o banco de dados/database finalconfig(database='raw_zone')
73tags: []Agrupa modelos para seleção facilitadatags: ['daily', 'pii']
74not_nullTeste de valor não nulo (YAML)- tests: [not_null]
75uniqueTeste de valores únicos (YAML)- tests: [unique]
76accepted_valuesTeste de lista de valores permitidosvalues: ['shipped', 'placed']
77relationshipsTeste de chave estrangeirato: ref('users'), field: id
78severity: warnFaz o teste não falhar o pipelineseverity: warn
79persist_docsLeva descrições para os comentários do bancopersist_docs: {"columns": true}
80quote: trueForça aspas em nomes de colunasquote: true
81dbt_utils.surrogate_keyCria hash MD5 de colunas{{ dbt_utils.surrogate_key(['id', 'dt']) }}
82dbt_utils.starSeleciona tudo exceto colunas X, Y{{ dbt_utils.star(ref('tbl'), except=['pass']) }}
83dbt_utils.pivotTransforma linhas em colunas{{ dbt_utils.pivot('status', ['a', 'b']) }}
84dbt_utils.unpivotTransforma colunas em linhas{{ dbt_utils.unpivot(ref('tabela'), cast_to='str') }}
85dbt_utils.date_spineGera uma série temporal de datas{{ dbt_utils.date_spine("day", "2020-01-01") }}
86check_colsSnapshot: verifica colunas para mudançascheck_cols: ['email', 'status']
87strategy: 'timestamp'Snapshot: usa coluna de data para mudarupdated_at: 'updated_at'
88dbt run --select state:failedTenta rodar apenas o que falhou no CIdbt run -s state:failed
89graph.nodesAcessa metadados do projeto via Jinja{{ graph.nodes.values() }}
90modules.datetimeUsa biblioteca datetime do Python no Jinja{{ modules.datetime.datetime.now() }}
91dbt cloneClona tabelas entre ambientes (Snowflake/BQ)dbt clone --select tag:heavy
92dbt run --deferUsa tabelas de prod se as de dev não existemdbt run --defer --state path/
93adapter.get_columns_in_relationLista colunas de uma tabela no bancoadapter.get_columns_in_relation(this)
94dbt build --dry-runSimula a execução sem aplicardbt build --dry-run
95quote_columns: falseDesativa aspas automáticas em seedsquote_columns: false
96dispatch: macro_namespaceConfigura prioridade de pacotesdispatch: [{'macro_namespace': 'util'}]
97store_failures: trueSalva registros que falharam no teste em tabelastore_failures: true
98limit 100Usado com target.name para economizar em dev{% if target.name == 'dev' %} limit 100 {% endif %}
99dbt run-operation grant_accessMacro comum para permissões pós-rundbt run-operation grant_access --args '{"role": "bi"}'
100generate_schema_nameMacro especial para customizar nomes de schema{% macro generate_schema_name(...) %}