CommunityPesquisa e Análise de Dadosgithub.com

Construindo Modelos dbt

Construa modelos dbt bem estruturados — camadas staging/intermediate/marts, ref() e source(), materializações e modelos incrementais com a estratégia correta. Use ao criar ou refatorar modelos dbt, escolher entre view, table ou incremental, estruturar um projeto dbt ou escrever lógica incremental.

O que é Construindo Modelos dbt?

Esta skill guia você na criação e refatoração de modelos dbt (data build tool) seguindo as melhores práticas, como a separação em camadas (staging, intermediate, marts), uso correto de `ref()` e `source()` para gerenciar dependências e ambientes, e escolha adequada de materialização (view, table, incremental ou ephemeral). Ela também aborda a implementação de modelos incrementais com estratégias como `merge` e `insert_overwrite`, garantindo idempotência e tratamento de dados atrasados. Suportada em qualquer plataforma que execute dbt (BigQuery, Snowflake, Redshift, Spark, etc.), a skill é ideal para desenvolvedores que desejam estruturar projetos dbt de forma limpa, testável e eficiente, evitando armadilhas comuns como nomes de tabelas hard-coded ou modelos monolíticos.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Unknown-333/awesome-data-engineering-skills/tree/main/skills/building-dbt-models

Installed? Explore more Pesquisa e Análise de Dados skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Construindo Modelos dbt faz?

Quando usar

  • Ao criar ou refatorar modelos .sql em um projeto dbt.
  • Ao decidir a materialização (view / table / incremental / ephemeral).
  • Ao estruturar camadas (staging → intermediate → marts).
  • Ao escrever modelos incrementais para tabelas grandes e crescentes.
  • NÃO use para criação de testes (use testing-dbt-projects) ou falhas de execução (use debugging-dbt-runs).

Fluxo de trabalho

- [ ] Coloque o modelo na camada correta (staging/intermediate/marts)
- [ ] Referencie upstream apenas via ref()/source() — nunca nomes fixos
- [ ] Escolha a materialização com base no tamanho e na necessidade de atualização
- [ ] Para incremental, defina unique_key + filtro is_incremental()
- [ ] Adicione uma entrada em schema.yml com testes
  1. Camadas. staging/ = um modelo por tabela de origem, renomeação/tipagem leve, materializado como views. intermediate/ = lógica de negócio reutilizável. marts/ = modelos dimensionais finais consumidos por BI, materializados como tables.
  2. Referencie corretamente. Use {{ ref('stg_orders') }} e {{ source('shop', 'orders') }} para que o dbt construa o DAG e gerencie ambientes. Nunca escreva schema.table diretamente.
  3. Escolha a materialização: view (barata, sempre fresca, pequena), table (leituras rápidas, reconstruída a cada execução), incremental (tabelas grandes com append/update), ephemeral (CTE inline, sem objeto).
  4. Modelos incrementais processam apenas linhas novas/alteradas.

Padrões

Modelo de staging — um por fonte, enxuto e consistente:

-- models/staging/shop/stg_orders.sql
with source as (select * from {{ source('shop', 'orders') }})
select
    order_id,
    customer_id,
    cast(order_ts as timestamp) as ordered_at,
    round(amount_cents / 100.0, 2) as amount
from source

Modelo incremental — filtra linhas novas e define uma chave de merge idempotente:

{{ config(materialized='incremental', unique_key='order_id',
          incremental_strategy='merge') }}

select * from {{ ref('stg_orders') }}
{% if is_incremental() %}
  -- apenas linhas mais recentes que as já carregadas, com lookback para dados tardios
  where ordered_at >= (select coalesce(max(ordered_at), '1900-01-01') from {{ this }})
                      - interval '3 days'
{% endif %}

unique_key + merge torna reexecuções idempotentes; o lookback captura linhas que chegam atrasadas. No BigQuery/Spark, prefira insert_overwrite em uma partição de data.

Armadilhas comuns

  • Nomes de tabela fixos em vez de ref()/source() — quebra o DAG, a linhagem e a troca de ambientes.
  • Incremental sem unique_key — reexecuções geram duplicatas.
  • Filtro incremental max(id) sem lookback — descarta silenciosamente dados tardios.
  • Lógica de negócio no staging — mantenha o staging enxuto; joins/agregações pertencem ao intermediate/marts.
  • Tudo materializado como table — desperdiça tempo de warehouse; use views para modelos pequenos/baratos e incremental para grandes.
  • Modelo gigante único — divida em etapas intermediárias para testabilidade e reuso.

Referências

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

Unknown-333/authoring-airflow-dags

Write production-grade Apache Airflow DAGs using the TaskFlow API — idempotent tasks, correct scheduling and catchup, retries/SLAs, connections/variables, and avoiding top-level code. Use when creating or reviewing Airflow DAGs, scheduling pipelines, wiring task dependencies, configuring retries/backfills, or fixing non-idempotent tasks.

Unknown-333/building-dagster-assets

Build Dagster pipelines using software-defined assets — asset dependencies, partitions, resources and IO managers, asset checks, and schedules/sensors. Use when creating Dagster assets or jobs, modeling data as assets, adding partitions or backfills, wiring resources/IO managers, or migrating from task-based orchestration to assets.

Unknown-333/building-feature-pipelines

Build ML feature pipelines and feature stores — point-in-time-correct joins to avoid label leakage, offline/online parity, feature freshness and backfills, and materialization with tools like Feast. Use when engineering features for ML, preventing train/serve skew or data leakage, building a feature store, or backfilling historical features for training.

Unknown-333/building-iceberg-tables

Design and operate Apache Iceberg tables — partitioning and hidden partitioning, partition/schema evolution, snapshots and time travel, compaction and small-file cleanup, and MERGE/upsert for lakehouse tables on Spark, Flink, Trino, or Snowflake. Use when creating or maintaining Iceberg tables, choosing partitioning, evolving schema/partitions, or fixing small-file and metadata bloat.

Unknown-333/building-ingestion-pipelines

Build batch and incremental data ingestion (extract-load) pipelines — full vs incremental extraction, change data capture (CDC), watermarks and high-water marks, API pagination and rate limits, and choosing managed EL tools (Fivetran, Airbyte) vs custom code. Use when ingesting data from databases, APIs, files, or SaaS into a warehouse/lake, or designing incremental extraction and CDC.

Unknown-333/building-kafka-consumers

Build reliable Apache Kafka consumers and producers — consumer groups and partition assignment, offset commit strategy, at-least-once vs exactly-once, idempotent/transactional producers, rebalancing, and dead-letter handling. Use when writing Kafka consumers/producers, configuring offset commits or consumer groups, tuning throughput, or handling rebalances and poison messages.

Unknown-333/debugging-data-pipelines

Systematically root-cause data pipeline failures and data incidents — job errors, wrong or missing data, duplicates, and freshness misses — by tracing lineage upstream, isolating the failing stage, reconciling against source, and planning a safe fix and backfill. Use when a pipeline fails, numbers look wrong, data is missing or duplicated, a dashboard is stale, or a stakeholder reports a data discrepancy.

Unknown-333/designing-backfills-and-replays

Plan and run safe data backfills and replays — idempotent reprocessing of historical windows, partition-by-partition execution, isolating backfill compute from production, verifying results, and avoiding double-counting or changed history. Use when backfilling a new or fixed model, reprocessing after a bug, replaying events, or loading history for a new pipeline without corrupting existing data.

Unknown-333/designing-data-contracts

Define and enforce data contracts between producers and consumers — explicit schema, semantics, ownership, SLAs, and versioning — to prevent silent upstream changes from breaking downstream pipelines. Use when a producer schema change could break consumers, defining an interface between teams/services and the warehouse, or adding schema enforcement at ingestion.

Habilidades Relacionadas