Cómo usar el Filtro en Azure Data Factory

Desde hace tiempo vengo escribiendo acerca de Azure Databricks, pero en esta ocasión voy a escribir un breve artículo acerca de cómo emplear la actividad de filtro en un pipeline de datos de Azure Data Factory. Son muchas la ocasiones en las que debemos realizar diferentes ajustes en los flujos de datos y por ello, elementos como el Filtro en Data Factory es tan interesante. En mi caso, como normalmente adopto una aproximación ELT en vez de ETL, no suelo emplear muchas de las actividades que nativamente ADF incluye. Sin embargo, en el ejemplo de hoy voy a mostrar cómo configurar de un modo rápido el Filtro.

Como puedes observar en el pipeline de abajo, tenemos un conjunto de actividades en ADF. Muchas de ellas son las que habitualmente más se emplean en los flujos de datos. Aquí como fuente he configurado una actividad de tipo REST que ejecuta la llamada a una url de Azure DevOps para extraer la información de los Test Run ejecutados por el equipo de QA. Si bien, tras realizar distintas pruebas para insertar los registros extraídos en una Azure SQL Database (paso realizado en el bucle «For Each«), observamos que el proceso no finalizaba correctamente debido a que en ocasiones nos llegaban registros sin los atributos necesarios para ser cargados en la tabla. Así que se realizó un análisis de dichos elementos y se detectó que todos tenían en común el valor del estado. Para todos los registros que fallaban el estado era 255.

Por lo tanto, la solución pasaba por incorporar una actividad de filtro previa a la ejecución del bucle y de ese modo, el proceso terminaría ejecutando el «merge statement» para historificar la información.

En ese momento, se añadió la nueva actividad y se configuró. Para quien no se haya enfrentado antes a esta «cajita», simplemente comentar que en la pestaña «Settings» hay que identificar el items sobre el que actuar y posteriormente indicar la acción de filtrado a ejecutar.

Como se observa justo arriba, el valor incluido en el campo Items no es otro que la salida de la actividad previa y para la condición, capturamos el atributo «state«, de cada elemento, mediante item().state y ahora queda usar la función equals() comparando el valor de «state» para cada elemento con ‘255’ y por último quedaba avisar de que era excluyente, de ahí el not().

IMPORTANTE
En caso de que el valor de state es una cadena, por ello en la función equals() se compara con ‘255’ y no 255. Por eso siempre es importante contralar los tipos de los campos de entrada.

CONCLUSIÓN
En ocasiones salir de nuestra zona de confort nos obliga a descubrir nuevas formas de hacer la cosas y aprovechar aquellas funcionalidades que existen nativamente en las soluciones con las que trabajamos. En mi caso, me ha venido genial pelearme con estructuras complejas de tipo JSON para emplearme a fondo con ellas y continuar ampliando conocimientos. Sin duda, me hubiera resultado infinitamente más sencillo cargarlas y tratarlas posteriormente con pySpark, pero soy de esos que no rechazan un buen «combate».

Os dejo el link de la función equals, por si queréis echarle un vistazo. Aquí

Por otro lado, recuerda que puedes formar parte de nuestra comunidad y estar al tanto de nuevos eventos en directo, tan sólo uniéndote al grupo de Meetup «Encuentros en la Tercera Fase».

Muchas gracias por ayudarnos a seguir creciendo y crear comunidad alrededor de la tecnología, metodologías e innovación,

Publicado por alb3rtoalonso

Soy un enamorado del poder de los datos. Entusiasta de la mejora y formación continua.

Deja un comentario