Práctica: Construir y Desplegar el Pipeline Completo

Lectura
40 min~5 min lectura

Concepto clave

Construir y desplegar un pipeline de datos analytics completo en dbt Cloud es como ensamblar una cadena de producción en una fábrica. Cada etapa del proceso debe estar perfectamente conectada: desde la ingesta de datos crudos hasta la transformación en modelos analíticos listos para consumo. La clave está en la automatización y la fiabilidad del flujo, asegurando que los datos sean consistentes y estén disponibles cuando se necesiten.

En el contexto de dbt Cloud, esto implica configurar un entorno donde los modelos, tests y documentación trabajen juntos sin intervención manual. Imagina que eres el arquitecto de un sistema de metro: defines las rutas (modelos), instalas señales de seguridad (tests) y creas mapas para los usuarios (documentación). El despliegue es cuando pones el sistema en funcionamiento, con trenes (jobs) que recorren las rutas automáticamente según un horario.

Cómo funciona en la práctica

Para construir y desplegar el pipeline completo, sigue estos pasos en dbt Cloud:

  1. Configura tu conexión al warehouse (como Snowflake o BigQuery) en el proyecto dbt Cloud, asegurándote de que las credenciales sean seguras y tengan los permisos adecuados.
  2. Desarrolla tus modelos SQL en el editor, organizándolos en carpetas como staging, intermediate y marts para reflejar las capas de transformación.
  3. Agrega tests en archivos YAML para validar la calidad de los datos, como comprobar valores nulos o unicidad en columnas clave.
  4. Genera documentación automática usando dbt docs generate y dbt docs serve para crear una vista web de tus modelos y sus relaciones.
  5. Configura un job en dbt Cloud que ejecute el pipeline completo, programándolo para que se ejecute diariamente o según sea necesario.

Un ejemplo real: supón que tienes datos de ventas crudos en una tabla llamada raw_sales. Primero, creas un modelo de staging para limpiar los datos, luego un modelo intermedio para calcular métricas, y finalmente un modelo final sales_mart para reportes. Cada paso se prueba y documenta antes del despliegue.

Codigo en accion

Aquí tienes un ejemplo funcional de un modelo de staging y su test asociado. Primero, el modelo SQL que transforma datos crudos:

-- models/staging/stg_sales.sql
{{ config(materialized='view') }}

SELECT
    sale_id,
    customer_id,
    CAST(sale_amount AS DECIMAL(10,2)) AS sale_amount, -- Conversión de tipo
    DATE(sale_date) AS sale_date, -- Normalización de fecha
    UPPER(product_category) AS product_category -- Estandarización de texto
FROM {{ source('raw_data', 'raw_sales') }}
WHERE sale_date >= '2023-01-01' -- Filtro para datos recientes

Luego, el archivo YAML que define tests para este modelo:

# models/staging/schema.yml
version: 2

models:
  - name: stg_sales
    description: "Modelo de staging para datos de ventas limpiados"
    columns:
      - name: sale_id
        description: "Identificador único de la venta"
        tests:
          - unique
          - not_null
      - name: sale_amount
        description: "Monto de la venta en dólares"
        tests:
          - not_null
          - accepted_values:
              values: ['>0']

Errores comunes

  • No configurar tests suficientes: Muchos ingenieros solo prueban la unicidad, pero olvidan validar rangos o relaciones entre tablas. Solución: Usa tests personalizados en dbt para cubrir lógica de negocio específica.
  • Desplegar sin revisar la documentación: Lanzar un pipeline sin verificar que la documentación esté actualizada puede llevar a confusiones en el equipo. Solución: Ejecuta dbt docs generate antes de cada despliegue y revisa los gráficos de dependencias.
  • Programar jobs con frecuencia inadecuada: Ejecutar el pipeline cada hora cuando los datos solo se actualizan diariamente desperdicia recursos. Solución: Ajusta la programación basándote en la frecuencia de ingesta de datos.
  • Ignorar el manejo de errores: Si un job falla, no tener alertas configuradas puede dejar el pipeline roto por horas. Solución: Configura notificaciones en dbt Cloud para fallos de jobs.
  • No versionar los cambios: Hacer modificaciones directamente en producción sin control de versiones puede causar inconsistencias. Solución: Usa ramas en Git y revisa los cambios en un entorno de desarrollo antes de fusionarlos.

Checklist de dominio

  • ¿Has conectado dbt Cloud a tu warehouse y verificado la conexión con una consulta de prueba?
  • ¿Todos tus modelos tienen tests definidos para validar calidad de datos clave?
  • ¿La documentación generada muestra claramente las relaciones entre modelos y columnas?
  • ¿Has configurado al menos un job en dbt Cloud que ejecute el pipeline completo de forma programada?
  • ¿Has probado el despliegue en un entorno de desarrollo antes de pasar a producción?
  • ¿Los logs de ejecución muestran que los tests pasan y los modelos se construyen sin errores?
  • ¿Has revisado y optimizado el tiempo de ejecución del pipeline para eficiencia?

Construye y despliega un pipeline de ventas en dbt Cloud

Sigue estos pasos para crear un pipeline completo que transforme datos de ventas crudos en un modelo analítico listo para usar:

  1. En tu proyecto dbt Cloud, crea una nueva rama en Git llamada feature/sales-pipeline.
  2. Desarrolla tres modelos SQL en la carpeta models/:
    • staging/stg_sales.sql: Limpia datos de una tabla fuente raw_sales, convirtiendo tipos y filtrando fechas.
    • intermediate/int_sales_metrics.sql: Calcula métricas como ventas totales por categoría usando el modelo de staging.
    • marts/sales_report.sql: Crea un modelo final que una métricas con información de clientes para reportes.
  3. Añade un archivo schema.yml en cada carpeta con tests para columnas clave (e.g., sale_id único, sale_amount positivo).
  4. Genera documentación ejecutando dbt docs generate en la terminal de dbt Cloud y revisa la vista web.
  5. Configura un job en dbt Cloud que:
    • Ejecute los modelos en orden: staging, intermediate, marts.
    • Incluya todos los tests.
    • Se programe para ejecutarse diariamente a las 2 AM.
  6. Fusiona la rama a main y monitorea la primera ejecución del job, verificando logs y resultados.
Pistas
  • Usa {{ source() }} para referenciar tablas fuente en lugar de nombres hardcodeados.
  • En los tests YAML, prueba no solo unique y not_null, sino también relationships entre modelos.
  • Configura notificaciones de email en el job para recibir alertas de fallos.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.