Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

dbt (Data Build Tool): Analytics Engineering Moderno para Pipelines de Dados

dbt (Data Build Tool): Analytics Engineering Moderno para Pipelines de Dados

O que é dbt?

dbt (data build tool) é uma ferramenta open-source de transformação de dados que permite que analistas e engenheiros de dados transformem dados em seus data warehouses usando comandos SQL familiares, combinados com as melhores práticas de engenharia de software — testes, documentação, versionamento e CI/CD. Criado por Tristan Handy em 2016 e mantido pela dbt Labs, o dbt se tornou o padrão de facto para o que hoje chamamos de Analytics Engineering.

Diferente de ferramentas tradicionais de ETL que movem dados entre sistemas, o dbt opera diretamente dentro do data warehouse (Snowflake, BigQuery, Redshift, Databricks, DuckDB, entre outros), executando transformações SQL após os dados já terem sido carregados. Esse paradigma é conhecido como ELT (Extract, Load, Transform), onde o carregamento acontece antes da transformação.

Por que dbt revolucionou a área de dados?

Antes do dbt, transformações de dados eram tipicamente feitas com:

  • Stored procedures: Difíceis de versionar, testar e depurar.
  • Python scripts: Complexos de manter, sem linhagem automática.
  • GUI-based ETL tools: Caras, proprietárias e com curva de aprendizado alta.

O dbt resolve todos esses problemas ao tratar a transformação de dados como código — SQL modular, testável e versionado no Git. Isso trouxe para a área de dados os mesmos benefícios que o Git trouxe para o desenvolvimento de software.

Conceitos Fundamentais

Models (Modelos)

Models são o coração do dbt. Cada model é um arquivo .sql que contém uma consulta SELECT. Quando você executa dbt run, o dbt transforma esse SELECT em uma tabela ou visão no seu warehouse.

-- models/stg_orders.sql
-- Model de staging: limpeza e padronização inicial

WITH source AS (
    SELECT * FROM {{ source('ecommerce', 'orders') }}
)

SELECT
    id AS order_id,
    customer_id,
    CAST(order_date AS DATE) AS order_date,
    status,
    COALESCE(amount, 0) AS amount,
    _loaded_at
FROM source
WHERE status IS NOT NULL

Materializations

O dbt oferece diferentes formas de materializar seus models no warehouse:

  • view: Cria uma view SQL (padrão para modelos de staging). Leve e sempre atualizada.
  • table: Cria uma tabela física. Mais rápida para consultas, mas precisa ser recriada.
  • incremental: Apenas novas linhas ou alterações. Ideal para grandes volumes de dados.
  • ephemeral: Não materializa — funciona como CTE reutilizável em outros modelos.
-- Configuração de materialização incremental
{{
    config(
        materialized='incremental',
        unique_key='order_id',
        incremental_strategy='merge'
    )
}}

SELECT * FROM {{ ref('stg_orders') }}
{% if is_incremental() %}
    WHERE _loaded_at > (SELECT MAX(_loaded_at) FROM {{ this }})
{% endif %}

Ref e Source: Gerenciamento de Dependências

O dbt usa duas funções Jinja especiais para gerenciar o grafo de dependências entre models:

  • {{ ref('model_name') }}: Referencia outro model dbt. O dbt constrói automaticamente a ordem de execução baseada nessas referências.
  • {{ source('source_name', 'table') }}: Referencia uma tabela bruta no warehouse, registrada no arquivo sources.yml.

Testes de Dados

Uma das funcionalidades mais poderosas do dbt é a capacidade de testar seus dados de forma declarativa:

-- schema.yml
version: 2

models:
  - name: stg_orders
    columns:
      - name: order_id
        tests:
          - unique
          - not_null
      - name: status
        tests:
          - accepted_values:
              values: ['pending', 'shipped', 'delivered', 'cancelled']
      - name: amount
        tests:
          - dbt_utils.expression_is_true:
              expression: >= 0

Execute com dbt test e veja exatamente quais registros falharam, com mensagens claras e rastreáveis.

Linhagem de Dados (Lineage)

O dbt gera automaticamente um grafo de linhagem (DAG — Directed Acyclic Graph) baseado nas referências ref() entre seus models. Você pode visualizar esse grafo executando dbt docs generate e depois dbt docs serve, que abre uma interface web interativa mostrando:

  • Quais tabelas alimentam quais models
  • O impacto de alterar um model específico
  • A linhagem completa de uma coluna desde a fonte bruta até o dashboard

Documentação Automatizada

No dbt, a documentação vive junto com o código. Você pode descrever models, colunas e fontes diretamente nos arquivos YML:

version: 2

models:
  - name: dim_customers
    description: "Dimensão de clientes consolidada, uma linha por cliente."
    columns:
      - name: customer_id
        description: "Chave primária do cliente."
        tests:
          - unique
          - not_null
      - name: lifetime_value
        description: "Receita total gerada pelo cliente durante todo o histórico."

Execute dbt docs generate e a documentação é gerada automaticamente com colunas, descrições, linhagem e resultados de testes — tudo em uma única interface web.

Macros e Pacotes (Packages)

O dbt usa Jinja como motor de templates, permitindo criar macros reutilizáveis e até mesmo publicar pacotes completos:

-- macros/calculate_margin.sql
{% macro calculate_margin(revenue, cost) %}
    CASE
        WHEN {{ revenue }} > 0
        THEN ({{ revenue }} - {{ cost }}) / {{ revenue }} * 100
        ELSE 0
    END
{% endmacro %}

-- Usando a macro em um model
SELECT
    order_id,
    {{ calculate_margin('revenue', 'cost') }} AS margin_pct
FROM {{ ref('stg_orders') }}

Pacotes populares incluem dbt_utils (funções auxiliares), dbt_expectations (testes avançados) e dbt_artifacts (métricas de execução).

CI/CD e Deploy

O dbt se integra nativamente com Git e pipelines de CI/CD. Um fluxo típico de trabalho:

  1. Desenvolvedor cria uma branch com novos models ou alterações.
  2. CI executa dbt build --select state:modified+ para compilar e testar apenas os models alterados e seus dependentes.
  3. Revisão de código via Pull Request — os revisores veem exatamente quais colunas e transformações mudaram.
  4. Merge na main dispara o deploy via dbt build completo ou incremental.
# .github/workflows/dbt_ci.yml
name: dbt CI

on:
  pull_request:
    branches: [main]

jobs:
  dbt-run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install dbt
        run: pip install dbt-snowflake
      - name: Run dbt
        run: dbt build --select state:modified+
        env:
          DBT_USER: ${{ secrets.DBT_USER }}
          DBT_PASSWORD: ${{ secrets.DBT_PASSWORD }}

Estrutura de um Projeto dbt

Um projeto dbt bem organizado segue uma convenção clara:

meu_projeto_dbt/
├── models/                # Models SQL organizados por camada
│   ├── staging/           # Dados brutos, limpeza inicial
│   ├── marts/             # Models prontos para consumo
│   │   ├── core/          # Dimensões e fatos centrais
│   │   └── finance/       # Models específicos do time financeiro
├── tests/                 # Testes genéricos customizados
├── macros/                # Macros Jinja reutilizáveis
├── analyses/              # Consultas exploratórias (não materializam)
├── seeds/                 # Arquivos CSV carregados como tabelas
├── snapshots/             # Tabelas tipo 2 para dados que mudam
├── dbt_project.yml        # Configuração principal do projeto
├── packages.yml           # Dependências de pacotes externos
└── profiles.yml           # Conexão com o data warehouse

dbt vs. Ferramentas Tradicionais

CaracterísticadbtPython ScriptsGUI ETL (Informatica, Talend)
Curva de aprendizadoBaixa (SQL)Média-AltaAlta (proprietário)
Versionamento GitNativoManualLimitado
Linhagem automáticaSimNãoParcial
Testes de dadosDeclarativos nativosCustomizadosLimitados
DocumentaçãoAutomática (docs generate)ManualManual
Open-sourceSimSimNão (caro)

Quando usar (e não usar) dbt

O dbt é ideal quando:

  • Seus dados já estão carregados em um data warehouse moderno (Snowflake, BigQuery, Redshift, Databricks, DuckDB).
  • Suas transformações podem ser expressas em SQL — que é o caso da maioria das análises de negócio.
  • Você quer aplicar CI/CD, testes e documentação aos seus pipelines de dados.
  • Seu time tem perfil de Analytics Engineering — analistas que codificam ou engenheiros que pensam em negócio.

Não é a melhor escolha quando:

  • Você precisa de transformações complexas fora do SQL (processamento de imagens, ML training). Para isso, Ferramentas como Airflow + Python são mais adequadas.
  • Seu data warehouse não suporta execução SQL direta (dados em Data Lakes com Spark, por exemplo — nesse caso, considere dbt Spark ou Apache Iceberg).
  • Você precisa de orquestração entre múltiplos sistemas (API calls, FTP). dbt não substitui um orquestrador como Airflow, Dagster ou Prefect — mas funciona dentro deles.

Ecosystemo e dbt Cloud

A dbt Labs oferece o dbt Cloud, uma plataforma SaaS que adiciona ao dbt open-source:

  • IDE baseada na web para desenvolvimento colaborativo.
  • Orquestração de jobs com schedule e notificações.
  • Observabilidade e alertas integrados.
  • dbt Semantic Layer para métricas definidas no dbt consumidas por ferramentas de BI.
  • Ambientes de desenvolvimento, staging e produção isolados.

O Semantic Layer, em particular, é inovador: você define métricas (receita, churn, LTV) uma vez no dbt e elas ficam disponíveis para qualquer ferramenta de BI (Tableau, Power BI, Metabase, Looker) com definição única e consistente.

Conclusão

O dbt transformou a maneira como equipes de dados trabalham. Ao tratar transformação de dados como software — com código modular, testes, documentação automatizada e CI/CD — ele trouxe rigor e produtividade para uma área que por décadas dependia de processos frágeis e pouco transparentes.

Se você trabalha com dados e ainda não experimentou o dbt, comece com pip install dbt-core e explore o tutorial oficial (jaffle shop). Em poucas horas você terá seu primeiro pipeline de dados versionado, testado e documentado. O Analytics Engineering é o presente e o futuro da área de dados — e o dbt é a ferramenta que lidera essa transformação.

Craft XP
Craft XP