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:
- Verifica que
order_idsea único y no nulo. - Asegura que
order_dateesté dentro del rango histórico de tu empresa. - Confirma que
amountsea 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_nullen 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 --datapara pruebas ad-hoc y luego formalízalas enschema.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
- ¿Tus modelos principales tienen tests para unicidad, no nulos y relaciones?
- ¿La documentación incluye el origen de datos y transformaciones clave?
- ¿Ejecutas
dbt testautomáticamente en tu pipeline de integración continua? - ¿Revisas y actualizas la documentación al menos en cada release mayor?
- ¿Tienes tests personalizados para reglas de negocio complejas?
- ¿Los tests cubren al menos el 80% de las columnas críticas?
- ¿Usas
dbt docs servepara 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:
- Prepara tu entorno: Abre dbt Cloud y navega al proyecto del curso. Localiza el modelo
models/marts/fct_sales.sqly su archivoschema.ymlcorrespondiente. - Analiza el modelo: Revisa
fct_sales.sqlpara entender las columnas:sale_id,date,product_id,quantity,revenue. Identifica reglas de negocio:sale_iddebe ser único,quantitypositiva,revenuecalculada correctamente. - 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 condim_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 entests/).
- 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.
- Ejecuta y valida: Corre
dbt testen dbt Cloud. Si falla, ajusta los tests. Luego, genera y revisa la documentación condbt docs generateydbt docs serve.
- 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.