Skip to content

Una Perspectiva Práctica para Probar Pipelines de Extracción y Carga

Published: at 09:00

En mi trayectoria como ingeniero de datos, he visto de todo: pipelines que funcionan como relojes suizos, y otros que parecen hechos con cinta adhesiva y buenas intenciones.

Y aunque la tecnología y los paradigmas han evolucionado (el cambio de ETL a ELT es un buen ejemplo), hay algo que sigue siendo una constante: las pruebas en los procesos de datos son un dolor de cabeza. Hoy quiero compartir contigo una estrategia que me ha resultado útil a la hora de escribir pruebas relevantes y efectivas.

El Problema: Testear lo que de verdad importa

Uno de los errores más comunes que he visto en los pipelines de EL (Extract & Load), es caer en la trampa de las pruebas redundantes. ¿Te suena esto? Creas pruebas funcionales que simulan datos específicos para validar configuraciones concretas. Por ejemplo, imagina un pipeline con esta configuración:

[
  {"table_name": "invoices", "columns": {"id": "integer", "amount": "float"}},
  {"table_name": "employees", "columns": {"id": "integer", "name": "str"}}
]

Y entonces, te pones a escribir pruebas que verifican si las tablas se crean correctamente usando una muestra de datos obtenida de la API y añadiendo un mock de la API. Suena bien, ¿no? Pues no tanto. Este enfoque tiene más agujeros que un queso suizo:

Lo Que Realmente Deberías Probar: Menos Es Más

Con la experiencia he aprendido que no todas las pruebas son iguales. Algunas son esenciales, y otras nos pueden dar una falsa sensación de seguridad. Aquí te propongo un enfoque práctico, dividido en cuatro niveles:

1. Pruebas Unitarias

Estas pruebas son como el cinturón de seguridad de tu pipeline. Verifican que los componentes individuales funcionan como deberían. Por ejemplo:

No son glamurosas, pero son tu primera línea de defensa. Si fallan, sabes que el problema está en el código, no en la configuración.

2. Pruebas Funcionales Genéricas

Aquí es donde empiezas a ganar tiempo. En lugar de probar configuraciones específicas, te centras en lo genérico. Consideremos una configuración genérica como esta:

{"table_name": "generic_table", "columns": {"col1": "integer", "col2": "string"}}

Con esta configuración, podrías probar las siguientes funcionalidades:

Estas pruebas cubren los mismos casos que configuraciones específicas (invoices, employees, etc.). Es como probar un molde para galletas en lugar de cada galleta individual.

3. Pruebas de Integración

Este es el nivel donde te aseguras de que todo funciona en conjunto. Aquí validas:

Estas pruebas son como el ensayo general antes del concierto. Si todo va bien aquí, es probable que tu pipeline funcione en producción.

Pero ojo: Las pruebas de interoperabilidad en un entorno de CI/CD pueden volverse complejas. En mi experiencia, probar el pipeline en un entorno de pruebas (como una instancia dedicada de Airflow, y una bases de datos de prueba) funcionan bien para este tipo de comprobaciones.

4. Pruebas de calidad del dato

Comprobar la calidad de los datos es la última pieza de este rompecabezas, y hay varias herramientas que nos pueden ayudar con este objetivo. Veamos dos enfoques complementarios:

Pruebas Pre-Carga con Great Expectations: Si necesitas detectar problemas antes de que los datos lleguen al data warehouse, Great Expectations es tu aliado. Con esta herramienta puedes validar numerosos aspectos de la calidad de los datos y generar documentación. Por ejemplo, para el dataset de invoices, podrías evaluar que la cantidad total se encuentra en un cierto rango, que los impuestos aplicados son de un determinado porcentaje, o que se ha creado en un determinado rango de fechas.

Pruebas Post-Carga con dbt y Elementary: En la fase de transformación, dbt y Elementary te permiten ir un poco más allá (por ejemplo, añadiendo tests de anomalías de volumen, outliers, etc.) e integrarlo con tus modelos que encapsulan la lógica de negocio. En mi experiencia, es en la fase de transformación cuando realmente se tiene la información suficiente para hacer pruebas de calidad de datos que sean relevantes.

Conclusión: Menos Pruebas, Más Valor

Al final del día, el objetivo no es escribir más pruebas, sino escribir mejores pruebas. Crear pruebas efectivas en pipelines de EL consiste en encontrar un equilibrio entre cobertura, mantenibilidad y valor práctico. Priorizar lo genérico sobre lo específico no solo te ahorra tiempo, sino que también te da la tranquilidad de saber que tu pipeline es robusto y confiable.

Happy testing!