Implementar Tests Exhaustivos y Documentación

Lectura
25 min~4 min lectura

Concepto clave

Los tests exhaustivos en dbt Cloud son verificaciones automatizadas que garantizan la calidad de tus datos transformados. Piensa en ellos como los controles de calidad en una fábrica: cada producto (tabla o vista) debe pasar una serie de inspecciones antes de considerarse listo para su uso. Estos tests validan desde la integridad básica (valores no nulos, unicidad) hasta reglas de negocio específicas (rangos aceptables, relaciones entre tablas).

La documentación complementa los tests al proporcionar contexto humano. No es solo describir columnas; es explicar el "por qué" detrás de cada transformación, las fuentes de datos y las decisiones de negocio. En un equipo analytics, documentar bien es como dejar un mapa detallado: acelera la incorporación de nuevos miembros y reduce errores en futuros desarrollos. Juntos, tests y documentación crean un pipeline confiable y mantenible.

Cómo funciona en la práctica

Imagina que estás modelando ventas mensuales. Primero, defines tests en tu archivo schema.yml para la tabla stg_orders:

  1. Verifica que order_id sea único y no nulo.
  2. Asegura que order_date esté dentro del rango histórico de tu empresa.
  3. Confirma que amount sea positivo.

Luego, documentas cada columna: origen de los datos, transformaciones aplicadas y ejemplos de valores. En dbt Cloud, ejecutas dbt test para validar automáticamente, y usas dbt docs generate para publicar la documentación en un sitio web interactivo. Este flujo se integra en tu pipeline diario, fallando si los tests no pasan, lo que previene problemas en reportes downstream.

Codigo en accion

Antes: Un modelo sin tests ni documentación.

# models/staging/schema.yml
version: 2

models:
  - name: stg_orders
    description: ""
    columns:
      - name: order_id
        description: ""
      - name: customer_id
        description: ""
      - name: amount
        description: ""

Después: Con tests exhaustivos y documentación clara.

# models/staging/schema.yml
version: 2

models:
  - name: stg_orders
    description: "Tabla de órdenes de venta limpiada y estandarizada. Fuente: sistema ERP. Transformaciones aplicadas: conversión de moneda a USD, filtrado de órdenes canceladas."
    columns:
      - name: order_id
        description: "Identificador único de la orden. Generado por el ERP."
        tests:
          - unique
          - not_null
      - name: customer_id
        description: "ID del cliente asociado. Relación con dim_customers."
        tests:
          - not_null
          - relationships:
              to: ref('dim_customers')
              field: customer_id
      - name: amount
        description: "Monto total en USD después de impuestos. Debe ser positivo."
        tests:
          - not_null
          - accepted_values:
              values: ['>0']

Errores comunes

  • Tests demasiado permisivos: Usar solo not_null en campos críticos, ignorando unicidad o relaciones. Solución: Define tests para cada regla de negocio relevante.
  • Documentación desactualizada: Modificar modelos sin actualizar la descripción. Solución: Incluye la actualización de docs en tu checklist de desarrollo.
  • Falta de tests personalizados: No crear tests para validaciones complejas, como sumas de columnas. Solución: Usa dbt test --data para pruebas ad-hoc y luego formalízalas en schema.yml.
  • Ignorar el performance: Agregar muchos tests que ralentizan el pipeline. Solución: Prioriza tests críticos y ejecuta algunos solo en schedules específicos.
  • No integrar en CI/CD: Correr tests manualmente en vez de automáticamente en cada deploy. Solución: Configura dbt Cloud para ejecutar tests en cada pull request.

Checklist de dominio

  1. ¿Tus modelos principales tienen tests para unicidad, no nulos y relaciones?
  2. ¿La documentación incluye el origen de datos y transformaciones clave?
  3. ¿Ejecutas dbt test automáticamente en tu pipeline de integración continua?
  4. ¿Revisas y actualizas la documentación al menos en cada release mayor?
  5. ¿Tienes tests personalizados para reglas de negocio complejas?
  6. ¿Los tests cubren al menos el 80% de las columnas críticas?
  7. ¿Usas dbt docs serve para revisar la documentación localmente antes de publicar?

Implementar Tests y Documentación en un Modelo de Ventas

En este ejercicio, mejorarás un modelo existente en dbt Cloud agregando tests exhaustivos y documentación. Sigue estos pasos:

  1. Prepara tu entorno: Abre dbt Cloud y navega al proyecto del curso. Localiza el modelo models/marts/fct_sales.sql y su archivo schema.yml correspondiente.
  2. Analiza el modelo: Revisa fct_sales.sql para entender las columnas: sale_id, date, product_id, quantity, revenue. Identifica reglas de negocio: sale_id debe ser único, quantity positiva, revenue calculada correctamente.
  3. Agrega tests: En schema.yml, define tests para cada columna:
    • sale_id: unique y not_null.
    • date: not_null y que esté entre 2020-01-01 y hoy.
    • product_id: not_null y relación con dim_products.
    • quantity: not_null y accepted_values mayor que 0.
    • revenue: not_null y custom test que verifique revenue = quantity * price (usa un test personalizado en tests/).
  4. Documenta: Añade descripciones al modelo y cada columna. Incluye fuente de datos (ej: "Sistema de ventas"), transformaciones (ej: "Conversión de moneda"), y ejemplos.
  5. Ejecuta y valida: Corre dbt test en dbt Cloud. Si falla, ajusta los tests. Luego, genera y revisa la documentación con dbt docs generate y dbt docs serve.
Pistas
  • Usa el test 'relationships' para las claves foráneas como product_id.
  • Para el test personalizado de revenue, crea un archivo en tests/ con una consulta SQL que compare revenue con quantity * price.
  • En la documentación, sé específico: en vez de "ID de venta", escribe "Identificador único generado por el POS".

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.