Cuando los datasets crecen, ejecutar transformaciones completas en cada ejecución deja de ser eficiente.
Reprocesar millones o billones de filas cada vez implica:
- Mayor consumo de cómputo
- Más tiempo de ejecución
- Costes innecesarios
- Retrasos en pipelines
En dbt Labs, los modelos incrementales permiten procesar únicamente los nuevos datos o los registros modificados.
En arquitecturas modernas sobre Snowflake, esta estrategia es especialmente potente.
¿Qué es un modelo incremental?
Un modelo incremental es un modelo dbt que:
- Se ejecuta completamente la primera vez
- En ejecuciones posteriores, solo procesa datos nuevos o actualizados
Esto se define mediante:
{{ config(materialized=’incremental’) }}
Ejemplo básico
{{ config(materialized=’incremental’) }}
SELECT
order_id,
customer_id,
total_amount,
updated_at
FROM raw_orders
{% if is_incremental() %}
WHERE updated_at > (SELECT MAX(updated_at) FROM {{ this }})
{% endif %}
Cómo funciona:
- En la primera ejecución → carga todo.
- En ejecuciones posteriores → solo carga registros con updated_at mayor al máximo existente.
¿Qué hace is_incremental()?
is_incremental() es una macro interna que devuelve TRUE cuando:
- El modelo ya existe.
- El materialization es incremental.
- No se está forzando full refresh.
Permite definir lógica condicional específica para ejecuciones incrementales.
Estrategias incrementales
1️⃣ Append (por defecto)
Agrega nuevos registros sin modificar existentes.
Útil cuando:
- Los datos no cambian.
- No existen updates históricos.
2️⃣ Merge (muy común en Snowflake)
Permite:
- Insertar nuevos registros.
- Actualizar registros existentes.
Ejemplo:
{{ config(
materialized=’incremental’,
unique_key=’order_id’
) }}
En Snowflake, dbt genera internamente un MERGE.
Ideal cuando:
- Existen updates.
- Se trabaja con Slowly Changing Dimensions.
- Se reciben datos modificados.
Importancia de unique_key
Cuando usamos estrategia merge, debemos definir:
unique_key=’order_id’
Esto indica cómo identificar registros únicos para actualizar correctamente.
Sin unique_key, el modelo no puede hacer merge correctamente.
Ejemplo más robusto
{{ config(
materialized=’incremental’,
unique_key=’order_id’
) }}
SELECT
order_id,
customer_id,
total_amount,
updated_at
FROM raw_orders
{% if is_incremental() %}
WHERE updated_at > (
SELECT COALESCE(MAX(updated_at), ‘1900-01-01’)
FROM {{ this }}
)
{% endif %}
El uso de COALESCE evita errores en primera ejecución.
Ventajas en Snowflake
En Snowflake, los modelos incrementales son especialmente eficientes porque:
- El cómputo es escalable.
- Las micro-partitions optimizan lectura.
- El MERGE está optimizado.
- Se evita reprocesar tablas masivas.
El ahorro en costes puede ser significativo.
Casos de uso ideales
- Tablas de eventos.
- Logs.
- Transacciones.
- Tablas con timestamps confiables.
- Integraciones CDC.
No todos los modelos deben ser incrementales.
Cuándo no usar incremental
Puede no ser recomendable cuando:
- El dataset es pequeño.
- La lógica requiere recalcular todo.
- No existe columna de actualización confiable.
- Hay dependencias complejas entre registros.
Forzar incremental en escenarios incorrectos puede generar inconsistencias.
Buenas prácticas
- Siempre usar columna updated_at o equivalente.
- Validar lógica con full refresh periódico.
- Definir correctamente unique_key.
- Monitorizar volumen procesado.
- Documentar comportamiento incremental.
Full Refresh
Si necesitamos reconstruir completamente el modelo:
dbt run –full-refresh
Esto ignora la lógica incremental y recalcula todo.
Es útil en:
- Cambios estructurales.
- Ajustes de lógica.
- Corrección de errores históricos.
Modelos incrementales y arquitectura moderna
En arquitecturas ELT sobre Snowflake:
- La ingestión puede ser continua.
- Los modelos intermedios pueden ser incrementales.
- Los data marts pueden refrescarse parcialmente.
Esto permite pipelines más eficientes y escalables.
Errores comunes
- No manejar correctamente is_incremental().
- No definir unique_key.
- No considerar registros actualizados.
- Usar columnas no deterministas.
- No probar escenarios edge cases.
La lógica incremental debe diseñarse cuidadosamente.
Conclusión
Los modelos incrementales en dbt son una herramienta fundamental para escalar transformaciones en entornos de gran volumen. Permiten reducir costes, mejorar tiempos de ejecución y optimizar pipelines.
En combinación con plataformas cloud como Snowflake, representan una estrategia eficiente y alineada con arquitecturas modernas de datos.
Sin embargo, su implementación debe ser rigurosa y basada en columnas de actualización confiables para garantizar consistencia.




