Skip to main content
dbtJinjaSQLUncategorized

Macros en dbt: cómo reutilizar lógica y escalar tus modelos

By diciembre 1, 2023septiembre 2nd, 2026No Comments

Cuando los proyectos en dbt Labs crecen, el código SQL empieza a repetirse:

  • Lógica de limpieza similar en múltiples modelos
  • Cálculos estándar replicados
  • Condiciones repetidas
  • Transformaciones compartidas

Duplicar código no es escalable ni mantenible.

Aquí es donde entran las macros en dbt.

¿Qué es una macro en dbt?

Una macro en dbt es una función escrita en Jinja que permite:

  • Reutilizar fragmentos de SQL
  • Parametrizar lógica
  • Reducir duplicación
  • Centralizar transformaciones

Las macros se definen en archivos dentro de la carpeta /macros del proyecto.

Sintaxis básica

Ejemplo simple de macro:

{% macro calculate_margin(revenue, cost) %}

    ({{ revenue }} – {{ cost }})

{% endmacro %}

Uso dentro de un modelo:

SELECT

    order_id,

    {{ calculate_margin(‘total_revenue’, ‘total_cost’) }} AS margin

FROM orders;

La macro genera el SQL dinámicamente.

Jinja: el motor detrás de las macros

dbt utiliza Jinja como motor de plantillas.

Esto permite:

  • Variables
  • Condicionales
  • Bucles
  • Lógica dinámica

Ejemplo con condicional:

{% macro filter_active(column_name) %}

    {% if target.name == ‘prod’ %}

        {{ column_name }} = ‘active’

    {% else %}

        1 = 1

    {% endif %}

{% endmacro %}

Esto permite comportamientos distintos según entorno.

Casos de uso comunes

Las macros son especialmente útiles para:

  • Cálculos estándar compartidos
  • Lógica de auditoría
  • Generación dinámica de columnas
  • Transformaciones condicionales
  • Modelos multi-entorno

Reducen repetición y centralizan cambios.

Ejemplo avanzado: generar columnas dinámicamente

{% macro sum_columns(column_list) %}

    {% for col in column_list %}

        SUM({{ col }}) AS sum_{{ col }}{% if not loop.last %},{% endif %}

    {% endfor %}

{% endmacro %}

Uso:

SELECT

    {{ sum_columns([‘revenue’, ‘cost’, ‘tax’]) }}

FROM transactions;

Esto genera automáticamente múltiples agregaciones.

Macros y buenas prácticas

Para mantener calidad en proyectos grandes:

  • Documentar macros
  • Nombrarlas claramente
  • Evitar lógica excesivamente compleja
  • Mantenerlas modulares
  • Versionarlas adecuadamente

Las macros deben simplificar, no complicar.

Macros y paquetes externos

dbt permite utilizar paquetes externos que incluyen macros predefinidas.

Por ejemplo:

  • dbt-utils
  • dbt-expectations

Estos paquetes aportan funciones listas para usar y aceleran desarrollo.

Diferencia entre macro y modelo

Un modelo:

  • Genera una tabla o vista

Una macro:

  • Genera SQL reutilizable

La macro no crea objetos directamente, sino que produce código que otros modelos ejecutan.

Errores comunes

  • Abusar de macros para lógica innecesaria
  • Introducir demasiada lógica de negocio dentro de Jinja
  • No documentar parámetros
  • Hacer macros difíciles de leer
  • Mezclar demasiada lógica procedural

Las macros deben mantener claridad.

Macros y mantenimiento a largo plazo

Uno de los mayores beneficios es el mantenimiento centralizado.

Si una fórmula cambia:

  • Se actualiza la macro
  • Todos los modelos que la usan se benefician
  • No es necesario modificar múltiples archivos

Esto reduce deuda técnica.

Integración con plataformas cloud

En arquitecturas donde dbt transforma datos en plataformas como Snowflake, las macros permiten:

  • Estandarizar lógica de negocio
  • Mantener coherencia de métricas
  • Reducir duplicación
  • Escalar proyectos grandes

Se convierten en una pieza clave en proyectos enterprise.

Conclusión

Las macros en dbt permiten llevar los proyectos de transformación de datos a un nivel superior. Al encapsular lógica reutilizable y parametrizable, reducen duplicación, mejoran mantenibilidad y facilitan escalabilidad.

Utilizadas correctamente, las macros convierten proyectos dbt en estructuras más limpias, organizadas y profesionales.

En equipos que trabajan con modelado analítico avanzado, dominar macros no es opcional: es una habilidad esencial.

 

Leave a Reply