Quiz: Tests y Calidad de Datos

Quiz
10 min~4 min lectura

Quiz Interactivo

Pon a prueba tus conocimientos

Concepto clave

Los tests en dbt son verificaciones automatizadas que garantizan la calidad de tus datos transformados. Piensa en ellos como guardianes de la integridad que revisan constantemente que tus modelos cumplan reglas de negocio y expectativas técnicas. En el mundo real, son como los controles de calidad en una fábrica: cada producto (tu dato) pasa por una serie de comprobaciones antes de considerarse listo para su uso.

Existen dos tipos principales: tests genericos (como unique, not_null, accepted_values) que vienen predefinidos en dbt, y tests singulares que tu defines con SQL personalizado. La clave es que estos tests se ejecutan cada vez que construyes tus modelos, alertándote inmediatamente si algo falla, evitando que datos incorrectos lleguen a tus dashboards o análisis.

Cómo funciona en la práctica

Imagina que tienes un modelo de ventas diarias. Primero, defines qué quieres verificar: que cada transacción tenga un ID único, que la fecha no sea nula, y que el monto sea positivo. En dbt Cloud, esto se configura en archivos YAML junto a tus modelos. Luego, al ejecutar dbt test, el sistema:

  1. Construye los modelos necesarios
  2. Ejecuta cada test definido
  3. Reporta qué tests pasaron o fallaron
  4. Si hay fallos, te muestra exactamente qué filas violaron las reglas

El flujo completo es: desarrollo → configuración de tests → ejecución → revisión de resultados → corrección si es necesario.

Codigo en accion

Antes: Un modelo sin tests definidos

-- models/stg_orders.sql
SELECT
    order_id,
    customer_id,
    order_date,
    amount
FROM raw_orders

Despues: El mismo modelo con tests configurados

# models/schema.yml
version: 2

models:
  - name: stg_orders
    description: "Orders staging model"
    columns:
      - name: order_id
        description: "Primary key for orders"
        tests:
          - unique
          - not_null
      
      - name: customer_id
        description: "Foreign key to customers"
        tests:
          - not_null
          - relationships:
              to: ref('stg_customers')
              field: customer_id
      
      - name: amount
        description: "Order amount in USD"
        tests:
          - not_null
          - accepted_values:
              values: ['>0']

Errores comunes

  • Testear columnas innecesarias: Aplicar tests a todas las columnas sin pensar, lo que ralentiza la ejecución. Solución: Enfócate en columnas críticas para el negocio.
  • Ignorar tests que fallan intermitentemente: Si un test falla a veces, indica un problema real en los datos o la lógica. Solución: Investigar la causa raíz en lugar de desactivar el test.
  • No usar tests singulares para lógica compleja: Los tests genéricos no cubren todas las reglas de negocio. Solución: Crear tests personalizados con SQL para validaciones específicas.
  • Olvidar testear relaciones entre modelos: Los datos pueden ser válidos individualmente pero inconsistentes entre tablas. Solución: Usar el test relationships para mantener la integridad referencial.
  • Ejecutar tests solo localmente: Los datos en producción pueden diferir. Solución: Configurar ejecución automática de tests en dbt Cloud en cada deploy.

Checklist de dominio

  • Sé configurar tests genéricos (unique, not_null, accepted_values) en archivos YAML
  • Sé crear y ejecutar tests singulares con SQL personalizado
  • Sé interpretar los resultados de dbt test, identificando filas problemáticas
  • Sé configurar tests de relaciones entre modelos diferentes
  • Sé organizar tests en carpetas específicas para mejor mantenimiento
  • Sé programar ejecuciones automáticas de tests en dbt Cloud
  • Sé priorizar qué columnas y modelos necesitan más cobertura de tests

Implementa tests para un modelo de productos

En este ejercicio, mejorarás un modelo existente de productos agregando tests de calidad de datos.

  1. Descarga el archivo models/stg_products.sql desde tu repositorio dbt
  2. Revisa la estructura: tiene columnas product_id, product_name, category, price, y created_at
  3. Crea o edita el archivo models/schema.yml para definir tests que verifiquen:
    • product_id es único y no nulo
    • product_name no es nulo
    • category tiene solo valores válidos: 'Electronics', 'Clothing', 'Home', 'Other'
    • price es mayor que 0
    • created_at es una fecha válida (no nula y en el pasado)
  4. Agrega un test singular que verifique que ningún producto tenga precio mayor a 10000 (posible error de entrada)
  5. Ejecuta dbt test --model stg_products en dbt Cloud
  6. Si hay fallos, revisa los datos problemáticos y corrige el modelo o los tests según corresponda
  7. Documenta tus decisiones en un comentario en el YAML
Pistas
  • Usa el test accepted_values para la columna category
  • Para el test singular, crea un archivo en tests/ con una consulta que seleccione filas donde price > 10000
  • Recuerda que los tests de fecha pueden usar funciones como current_date para comparaciones

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.