Construcción de modelos dbt

Construye modelos dbt bien estructurados — capas staging/intermediate/marts, ref() y source(), materializaciones y modelos incrementales con la estrategia adecuada. Úsalo al crear o refactorizar modelos dbt, elegir tabla vs vista vs incremental, estructurar un proyecto dbt o escribir lógica incremental.

¿Qué es Construcción de modelos dbt?

Esta habilidad guía a los desarrolladores en la creación y refactorización de modelos dbt siguiendo las mejores prácticas de la industria. Cubre la colocación correcta de modelos en las capas staging (ligera transformación por tabla fuente), intermediate (lógica de negocio reutilizable) y marts (modelos dimensionales finales para BI). También ayuda a seleccionar la materialización adecuada (vista, tabla, incremental, efímera) según el tamaño de los datos y las necesidades de actualización, y a implementar modelos incrementales con claves únicas y filtros `is_incremental()` para garantizar idempotencia. La habilidad incluye patrones concretos para modelos staging e incrementales, con ejemplos de código que usan `ref()`, `source()` y estrategias de merge con ventana de retroceso para datos tardíos. Es compatible con cualquier proyecto dbt que use SQL, independientemente de la plataforma de almacenamiento (BigQuery, Snowflake, Redshift, etc.).

Compatible con~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 Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Construcción de modelos dbt?

Cuándo usarlo

  • Crear o refactorizar modelos .sql en un proyecto dbt.
  • Decidir la materialización (vista / tabla / incremental / efímera).
  • Estructurar capas (staging → intermediate → marts).
  • Escribir modelos incrementales para tablas grandes y en crecimiento.
  • NO usar para la autoría de pruebas (usa testing-dbt-projects) o fallos de ejecución (usa debugging-dbt-runs).

Flujo de trabajo

- [ ] Colocar el modelo en la capa correcta (staging/intermediate/marts)
- [ ] Referenciar solo upstream mediante ref()/source() — nunca nombres codificados
- [ ] Elegir materialización según el tamaño y las necesidades de actualización
- [ ] Para incremental, establecer unique_key + filtro is_incremental()
- [ ] Agregar una entrada en schema.yml con pruebas
  1. Capas. staging/ = un modelo por tabla fuente, renombrado/tipado ligero, materializado como vistas. intermediate/ = lógica de negocio reutilizable. marts/ = modelos dimensionales finales consumidos por BI, materializados como tablas.
  2. Referenciar correctamente. Usa {{ ref('stg_orders') }} y {{ source('shop', 'orders') }} para que dbt construya el DAG y gestione los entornos. Nunca escribas esquema.tabla sin formato.
  3. Elegir materialización: vista (barata, siempre fresca, pequeña), tabla (lecturas rápidas, reconstruida cada ejecución), incremental (tablas grandes de añadir/actualizar), efímera (CTE en línea, sin objeto).
  4. Modelos incrementales procesan solo filas nuevas o cambiadas.

Patrones

Modelo staging — uno por fuente, delgado y 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 filas nuevas y establece una clave de fusión idempotente:

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

select * from {{ ref('stg_orders') }}
{% if is_incremental() %}
  -- solo filas más recientes que las ya cargadas, con una ventana de retroceso para datos tardíos
  where ordered_at >= (select coalesce(max(ordered_at), '1900-01-01') from {{ this }})
                      - interval '3 days'
{% endif %}

El unique_key + merge hace que las re-ejecuciones sean idempotentes; la ventana de retroceso captura filas que llegan tarde. En BigQuery/Spark, prefiere insert_overwrite en una partición por fecha.

Errores comunes

  • Nombres de tabla codificados en lugar de ref()/source() — rompe el DAG, el linaje y el cambio de entorno.
  • Incremental sin unique_key — las re-ejecuciones añaden duplicados.
  • Filtro incremental max(id) sin ventana de retroceso — descarta silenciosamente datos tardíos.
  • Lógica de negocio en staging — mantener staging delgado; las uniones/agregaciones pertenecen a intermediate/marts.
  • Todo materializado como table — desperdicia tiempo del almacén; usa vistas para modelos pequeños/baratos e incremental para los grandes.
  • Un modelo gigante — dividir en pasos intermedios para capacidad de prueba y reutilización.

Referencias

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.

Skills relacionados