¿Qué Es el Testing ETL?
ETL (Extract, Transform, Load) es el proceso de mover datos de sistemas fuente a sistemas destino, típicamente data warehouses o bases de datos analíticas. El testing ETL verifica que este proceso sea correcto, completo y performante.
Sistemas Fuente → Extract → Transform → Load → Sistema Destino
(bases de datos, (extraer (limpiar, (insertar (data warehouse,
APIs, archivos) datos) convertir, en BD analítica)
agregar) destino)
Los bugs ETL son costosos porque corrompen datos analíticos. Si un reporte muestra números de ingresos incorrectos porque el pipeline calculó mal las conversiones de moneda, las decisiones de negocio basadas en esos datos son erróneas.
Las Tres Fases del Testing ETL
Fase 1: Testing de Extracción
Verifica que los datos se extraigan correctamente de los sistemas fuente.
Casos de prueba:
- Todos los registros esperados se extraen (comparación de conteos).
- Los filtros funcionan correctamente (rangos de fecha, filtros de estado).
- La extracción incremental solo toma registros nuevos o modificados.
-- Fuente: Contar registros para ventana de extracción
SELECT COUNT(*) FROM source_orders
WHERE updated_at >= '2025-01-01' AND updated_at < '2025-01-02';
-- Staging: Verificar mismo conteo después de extracción
SELECT COUNT(*) FROM staging_orders
WHERE source_date >= '2025-01-01' AND source_date < '2025-01-02';
Fase 2: Testing de Transformación
Verifica que las transformaciones de datos produzcan resultados correctos.
| Transformación | Ejemplo | Test |
|---|---|---|
| Conversión de tipo | String fecha → DATE | Verificar manejo de formato, zonas horarias |
| Conversión de moneda | USD → EUR | Verificar tasas de cambio, redondeo |
| Agregación | Totales diarios → mensuales | Verificar que sumas coincidan |
| Deduplicación | Eliminar duplicados | Verificar registro correcto retenido |
| Valores default | NULL → “Desconocido” | Verificar manejo de NULLs |
| Reglas de negocio | Mapeo de estados | Verificar aplicación de reglas |
Fase 3: Testing de Carga
Verifica que los datos transformados se escriban correctamente al sistema destino.
Verificaciones de Calidad de Datos
Completitud
SELECT COUNT(*) FROM target_orders WHERE customer_id IS NULL;
-- Esperado: 0
Precisión
-- Comparación de sumas
SELECT SUM(total) FROM source_orders WHERE order_date = '2025-01-15';
SELECT SUM(total_converted) FROM target_orders WHERE order_date = '2025-01-15';
Consistencia
SELECT COUNT(*) FROM target_order_items oi
LEFT JOIN target_orders o ON oi.order_id = o.order_id
WHERE o.order_id IS NULL;
-- Esperado: 0
Testing de Manejo de Errores
Los pipelines ETL deben manejar errores elegantemente:
- Registros malos: Datos fuente con formatos inválidos o campos faltantes.
- Fallas de red: Sistema fuente inalcanzable durante extracción.
- Cambios de schema: Fuente agrega o elimina columnas.
- Picos de volumen: 10x el volumen normal de datos.
Carga Incremental vs Completa
Carga completa: Elimina y recrea todos los datos destino.
Carga incremental: Solo procesa registros nuevos o cambiados. Más compleja de probar.
Ejercicio: Testing de Pipeline ETL
Configuración
Crea tablas fuente y destino, inserta datos con problemas intencionales.
Tarea 1: Validación de Extracción
Escribe queries para verificar completitud de extracción:
- Contar registros fuente por fecha.
- Contar registros fuente por región.
- Identificar registros con problemas de calidad antes de transformación.
Tarea 2: Validación de Transformación
Simula la transformación (el ETL agrega por producto, mes y región, convierte a USD):
- Verifica conversión de moneda: EUR a tasa 1.08, GBP a tasa 1.27.
- Verifica agregación: Widget A en región Norte para enero debe totalizar 20 unidades, $500 USD.
- Verifica routing de errores: Registros con cantidad negativa, producto NULL o moneda inválida deben ir a tabla etl_errors.
Tarea 3: Validación de Carga (Reconciliación)
Después de que el ETL se ejecute, verifica:
- Ingresos totales en fuente (después de conversión) igualan ingresos en destino.
- Cantidad total en fuente (excluyendo errores) iguala cantidad en destino.
- Número de registros de error coincide con conteo esperado (3 registros malos).
- No existen filas de resumen duplicadas.
Tarea 4: Test de Idempotencia
- Ejecuta el pipeline una vez. Registra el estado del destino.
- Ejecuta el pipeline de nuevo con los mismos datos fuente.
- Verifica que el estado sea idéntico (sin duplicados, mismos conteos).
Tarea 5: Test de Carga Incremental
- Ejecuta el ETL para datos del 15 de enero.
- Agrega nuevos registros para el 16 de enero.
- Ejecuta el ETL para el 16 de enero (incremental).
- Verifica que datos del 15 de enero no cambien y datos del 16 se agreguen.
Entregables
- Queries de validación de extracción con resultados.
- Queries de verificación de transformación.
- Reporte de reconciliación comparando totales fuente y destino.
- Resultados del test de idempotencia.
- Verificación de carga incremental.