Great Expectations: ETL Automation y mucho más?

Hace un año aproximadamente me metí de lleno en ETL Testing, como Test Automation Lead/Manager. Lógicamente, una de mis primeras preguntas fue "qué herramientas/librerías/prácticas hay para ayudar en ETL desde el lado de Automation? Ahí fue que encontré, entre otras cosas muy interesantes, a esta librería de Python.


Así que hoy, gente, vamos a dedicarle un post que posteriormente se transforme en Test Drive en el canal seguramente!

Dashboard con datos
La importancia de testear la transformación de datos.

No es ningún secreto que, si hablamos de Data, lo primero que pensamos en términos de lenguajes de programación es Python. Si, se pueden hacer cosas interesantes con Groovy si tenés que usar Java, pero Python simplemente tiene sentido y no muchas vueltas. De ahí que me encontrase con este paquete para hacer Data Profiling, ETL Testing y mucho más con funciones predefinidas en forma de "Expectativas". Pero...qué son las expectativas? Qué hace este paquete?


A qué llamamos una expectativa en data?


Empecemos por acá. Una expectativa es un requerimiento para un campo básicamente. En el caso de este paquete, es una declaración que un sistema puede evaluar y que, por otro lado, está presentado en un lenguaje fácil de leer para una persona. Les suena? Si, es un poco la filosofía aplicada a BDD y un poco cómo se maneja Cucumber, Specflow y otros.


Recordemos que en el caso de data testing las cosas cambian. Ya no hay una "funcionalidad" que probar ni una API. Es data. Estos datos pueden fluir de A a B, o quizás de A y B se sumen y se les aplique una lógica para terminar en C. Entonces... qué son estas expectativas?


Volviendo al tema de Cucumber, podríamos decir que estas expectativas son la función que define un step definition de Cucumber. Es lo más cercano que se me ocurrió para explicárselos.


Recordemos que en Cucumber tenemos

Given("acá pasa algo")
public void acáPasaAlgo(){
}

Bueno, si volamos toda sintaxis simpática y dejamos solo el acáPasaAlgo() y lo pasamos a los estándares de Python, quedaría acá_pasa_algo(). Eso es una expectativa. Por ejemplo, ya hablando de este paquete y cómo define estas expectativas:

expect_column_values_to_be_unique()

o

expect_column_mean_to_be_between(0,100)

Estas definiciones ya vienen listas para usarse, y básicamente actúan como wrapper de la lógica que, de otra manera, tendríamos que escribir nosotros. Lo bueno es que podemos expandir estas expectativas para cosas que no estén cubiertas, aunque es bastante extensivo lo que trae ya y seguramente estén cubiertos. Al día de hoy contamos con 125 de estas "expectativas" o como las llamo yo (y sus creadores) "assertions de data!


Pero no solo nos ayuda con probar y definir qué esperamos de nuestra data en ETL y Data Testing...


La cosa se pone interesante, en el sentido que esto termina funcionando, de la misma manera que los Features de Cucumber, en una especie de documentación viva. Vamos a tener unos buenos reportes HTML generados por la herramienta, documentando el estado y calidad de nuestra data según las expectativas definidas. No solo eso, sino que vamos a poder hacer Data Profiling con solamente pasar un set de datos para que analice y diga qué probar según los datos que encuentra. Obvio que esto no es mágico y se van a encontrar más con un buen punto de arranque más que "oh, me creó todos los tests automáticamente!".


Lo que hace es, una vez pasado un set de datos (que acepta varios formatos, tales como el querido CSV), analizar y decir "ok, esta columna edad suele tener valores entre X e Y, así que voy a crear un assertion que valide que siempre los valores son entre estos dos ints que encontré". Bastante copado, no?


Integraciones para todos los gustos


Otro punto a favor es que tiene integración con prácticamente todo lo que necesites. Necesitás conectar a tu dB con sqlAlchemy? Funciona. Necesitás enviar notificaciones a Slack? Funciona. Necesitás integrar tus validaciones de Data con Jenkins? Funciona!

Tiene integraciones con muchas, muchas herramientas conocidas y otras no tanto que vas a querer conocer (y que van al curso de ETL Automation que estoy preparando).


Conclusión

Los invito a que, si se manejan con Python, la prueben. Creo que también tiene una gema para Ruby si por algún motivo seguís con ese lenguaje. La documentación está bastante bien y probar el MVP planteado ahí es algo que te va a abrir los ojos y que vale la pena saber si te desempeñas como Test Engineer!



108 visualizaciones0 comentarios

Entradas Recientes

Ver todo