Concepto clave
dbt Cloud es una plataforma que permite a los Analytics Engineers transformar datos en el data warehouse mediante código SQL. A diferencia de herramientas ETL tradicionales, dbt se enfoca en la transformación de datos ya cargados, aplicando principios de ingeniería de software como versionado, testing y documentación.
Imagina que tu data warehouse es una cocina industrial: los ingredientes crudos (datos sin procesar) ya están en la despensa. dbt es el chef que toma esos ingredientes, los corta, mezcla y cocina para crear platos listos para servir (datos analíticos). La documentación es la receta, los tests son controles de calidad, y el versionado permite experimentar sin arruinar la producción.
Cómo funciona en la práctica
El flujo típico en dbt Cloud comienza con la conexión a tu warehouse (como Snowflake, BigQuery o Redshift). Luego defines modelos en archivos .sql que contienen SELECT statements. Estos modelos se organizan en un DAG (grafo acíclico dirigido) donde cada modelo puede depender de otros.
Paso a paso: 1) Configuras tu proyecto en dbt Cloud conectando el repositorio de código. 2) Defines modelos base que limpian datos crudos. 3) Construyes modelos intermedios que transforman datos. 4) Creas modelos finales para consumo de BI. 5) Ejecutas dbt run para materializar los modelos en tablas o vistas.
Codigo en accion
Ejemplo de un modelo base que limpia datos de ventas:
-- models/staging/stg_sales.sql
{{ config(materialized='view') }}
WITH raw_sales AS (
SELECT
order_id,
customer_id,
amount,
order_date,
status
FROM {{ source('raw', 'sales_table') }}
WHERE order_date >= '2023-01-01'
)
SELECT
order_id,
customer_id,
amount,
order_date,
CASE
WHEN status IN ('completed', 'shipped') THEN 'active'
ELSE 'cancelled'
END AS order_status
FROM raw_salesRefactorización para mejorar performance:
-- models/staging/stg_sales_optimized.sql
{{ config(
materialized='table',
indexes=[{'columns': ['order_date'], 'type': 'btree'}]
) }}
SELECT
order_id,
customer_id,
amount,
order_date,
CASE
WHEN status IN ('completed', 'shipped') THEN 'active'
ELSE 'cancelled'
END AS order_status
FROM {{ source('raw', 'sales_table') }}
WHERE order_date >= '2023-01-01'
QUALIFY ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY updated_at DESC) = 1Errores comunes
- No usar ref() para referenciar modelos: En lugar de escribir nombres de tablas directamente, usa {{ ref('model_name') }} para que dbt entienda las dependencias.
- Materializar todo como tabla: Usa views para datos que cambian frecuentemente y tables para datos estables, balanceando costo y performance.
- Ignorar el DAG: Modelos con dependencias circulares causan errores. Visualiza el grafo en dbt Cloud para detectar problemas.
- No configurar esquemas: Define esquemas claros (staging, intermediate, marts) para organizar los modelos.
- Olvidar tests básicos: Implementa tests de unicidad y not-null en columnas clave desde el inicio.
Checklist de dominio
- Conectar dbt Cloud a un data warehouse y repositorio Git
- Crear modelos base que referencian sources correctamente
- Usar ref() para establecer dependencias entre modelos
- Configurar materializaciones apropiadas (view, table, incremental)
- Ejecutar dbt run y dbt test desde la interfaz web
- Navegar por la documentación generada automáticamente
- Identificar y corregir errores comunes en el log de ejecución
Crear tu primer modelo incremental en dbt Cloud
En este ejercicio practicarás la creación de un modelo incremental que procesa solo datos nuevos, optimizando costos en tu warehouse.
- Accede a tu proyecto dbt Cloud y abre el editor SQL.
- Crea un nuevo archivo en models/marts/ llamado daily_sales_summary.sql.
- Define el modelo con configuración incremental usando unique_key y filtro por fecha.
- Referencia el modelo de staging stg_sales creado en la lección.
- Agrega datos diarios sumando el monto de ventas por cliente.
- Ejecuta el modelo con dbt run --select daily_sales_summary.
- Verifica en tu warehouse que la tabla se creó correctamente.
- Simula nuevos datos modificando el filtro de fecha y ejecuta de nuevo para ver el comportamiento incremental.
- Recuerda que los modelos incrementales requieren una unique_key para identificar registros únicos.
- Usa la macro is_incremental() para diferenciar entre ejecución completa y incremental.
- Configura el esquema de destino para mantener organizadas tus tablas.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.