By Azure

Creating ETL pipelines without code in the cloud: Azure Data Factory

Extraer, Transformar y cargar son palabras bastante usadas en el mundo de la ingeniería de datos. Es normal porque toca realizar y proveer infraestructura para la gestión de la información en la organización.

Fernando Cutire
Fernando Cutire

Table of Contents

Este artículo está basado en mi presentación de Creating ETL pipelines without code in the cloud: Azure Data Factory.

Dejo enlaces a mi presentación y documento guión para comentarios y revisión de participantes.

Intro

En mi rol en la Dirección de Investigación he recibido muchas consultas sobre diferentes unidades de la universidad. Lo que me ha llevado a explorar formas más eficientes de preparar los datos y servirlos según la necesidad de los indicadores solicitados.

El día de hoy les comparto una de mis últimas investigaciones que es relacionado a la nube, usando Azure que cuenta con créditos para estudiantes. Haré una introducción al tema para poder explicar la importancia y la problemática que resuelve servicios de la nube.

ETL para todos

Extraer, Transformar y cargar son palabras bastante usadas en el mundo de la ingeniería de datos.

Es normal porque toca realizar y proveer infraestructura para la gestión de la información en la organización.

Las ETL Pipelines por sus siglas Extract, Transform, Load muestran una forma ordenada para realizar estos procesos repetitivos.

En este artículo muestro como se pueden crear servicios de ETL en la nube de Azure, una de las principales herramientas que tenemos acceso con paquetes como el de estudiantes con 100$ créditos cada año y también por su importancia en la industria.

El rol del ingeniero de datos

Con la creciente afluencia de datos , nos hemos visto en la necesidad de poder realizar procesos que nos permitan almacenarlos y analizarlos de una forma confiable y a la velocidad de crecimiento del negocio.

Me gusta la definición de:

La ingeniería de datos es la parte de la ciencia de datos que se ocupa de las aplicaciones prácticas de recopilación y análisis de datos. Su objetivo es llevar el rigor de la ingeniería al proceso de construcción y soporte de sistemas de datos confiables.

Data Engineering on Azure Vlad Riscutia

La nube explicada en 3 minutos

No entraré en muchos detalles técnicos sobre la nube, daré a conocer

“La nube es un enorme conjunto de recursos que admite una variedad de servicios”.

La nube se refiere al software y los servicios que se ejecutan en Internet. Esto contrasta con el software y los servicios que se ejecutan localmente en su computadora. La nube también se utiliza para almacenar datos. Cuando almacena datos o utiliza un servicio en la nube, puede acceder a los datos desde cualquier lugar, utilizando cualquier dispositivo que se conecte a Internet, no solo desde el disco duro de su computadora o el servidor de red de su empresa.


Mi definición de nube es el típico modelo de alquiler pero orientado a computadoras.

Por ejemplo si necesitas movilizarte en un país como turista, alquilas un carro. Si no has cocinado, puedes comprar una pizza y satisfacer el hambre. La nube es un servicio.

Esto se relaciona con los términos de IaaS, PaaS y SaaS. Haciendo una analogía si quieres hacer un dulce, tienes las siguientes opciones.

Si no tienes horno en casa, ni molde ni ningún material, puedes alquilar un horno, comprar los implementos, comprar los ingredientes y hacer el dulce desde 0, esto te da más libertad pero aumenta la complejidad y el tiempo, esto sería una infraestructura como servicio. Un modelo más orientado a una negocio de repostería a escala.

Si tienes horno e implementos en casa puedes comprar los ingredientes y hacer el dulce, un equivalente a la plataforma como servicio. Puede ser para un acontecimiento especial.

De lo contrario si no quieres tener que librar con ninguno de esos inconvenientes y solo es para un cumpleaños, puedes comprar el dulce ya hecho. Esto sería un SaaS.

Entonces como entiendes, hay muchas formas de completar la tarea. La forma será determinada siempre por la necesidad, no al revés.

Con esto en mente veremos nuestro servicio de hoy.

Servicios de Azure para ingenieros y Analistas de Datos

Azure posee muchos servicios para ingenieros

Servicios de Azure mejor explicados por Vlad Riscutia de Data Engineering on Azure

Azure Storage

Los servicios de Azure Storage son los almacenes de datos básicos de Azure. Vienen en varios tipos: Azure Files que son recursos compartidos de archivos completamente administrados, Azure Disk para almacenamiento en disco de VM, Azure Blob para almacenamiento de datos de objetos no estructurados y más. Azure Data Lake Storage (Gen2) se basa en Azure Blob y agrega un sistema de archivos jerárquico y seguridad a nivel de archivos. Ninguno de estos servicios ofrece ninguna computación; son puramente de almacenamiento. Necesitará otros servicios para procesar los datos. Dicho esto, Azure Storage proporciona almacenamiento rentable a hiperescala.


AZURE SQL

Azure SQL es una base de datos en la nube administrada. Viene en varios sabores: SQL Server en Azure VM ayuda a migrar cargas de trabajo locales de Microsoft SQL Server a la nube; Azure SQL Managed Instance es una versión administrada basada en la nube de Microsoft SQL Server; Azure SQL Database es una versión sin servidor de una base de datos SQL. Según la cantidad de legado local que tenga su empresa, puede acceder fácilmente a la nube con una de las ofertas de SQL Server administrado o comenzar con una base de datos sin servidor nativa de la nube. Azure SQL proporciona todos los beneficios familiares de una base de datos relacional. Azure ofrece versiones basadas en la nube de otros motores de bases de datos populares: Azure Database for PostgreSQL, Azure Database for MySQL y Azure Database for MariaDB.


AZURE SYNAPSE Analytics

Azure Synapse Analytics es la evolución de Azure SQL Data Warehouse. La tecnología tiene como objetivo manejar un mayor volumen de datos que las bases de datos SQL tradicionales y desacopla el almacenamiento de la computación para que puedan escalar de forma independiente. Compute se escala de manera elástica para que haya más CPU disponible según sea necesario. Azure Synapse Analytics brinda una experiencia unificada en diferentes estructuras de datos (SQL, Azure Data Lake Storage, transmisión de datos, etc.) y tiempos de ejecución de análisis (SQL y Apache Spark), lo que facilita la integración y consulta de varios conjuntos de datos en una empresa.


AZURE DATA EXPLORER

Azure Data Explorer es un servicio de análisis y exploración de big data. Está optimizado para ingerir e indexar rápidamente grandes cantidades de datos y consulta estos datos con baja latencia. Un caso de uso común para Azure Data Explorer es el análisis de registro y telemetría a escala web. En general, es una gran plataforma para la exploración de datos ad hoc porque indexa automáticamente todos los datos ingeridos. Azure Data Explorer está diseñado para usarse como un servicio de solo anexión; los datos se pueden agregar pero no actualizar, y las eliminaciones no son granulares (no podemos eliminar filas individuales). Azure Data Explorer viene con su propio lenguaje de consulta llamado KQL (Kusto Query Language).

 AZURE DATABRICKS

Azure Databricks proporciona una versión administrada por Azure de Apache Spark, el marco de procesamiento de macrodatos de código abierto. Azure Databricks puede activar y desaprovisionar rápidamente clústeres de Apache Spark y admite el procesamiento implementado en Python, Scala, R, Java y SQL. Este servicio es una excelente opción para implementar o trasladar una solución basada en el ecosistema de Apache a la nube de Azure.

AZURE COSMOS DB 

Azure Cosmos DB es una base de datos NoSQL administrada para Azure. Expone varias API a los clientes (ya sea SQL, Apache Gremlin, MongoDB o Cassandra), lo que facilita el intercambio de otras bases de datos NoSQL cuando se traslada a la nube de Azure. También proporciona replicación geográfica llave en mano y garantías de tiempo de respuesta medidas en milisegundos. Esto lo convierte en una opción ideal para una solución de almacenamiento de back-end para una API web.

Creando nuestro entorno de Azure Data Factory

Prerrequisitos

  • Tener una cuenta en Azure. Créala aquí
  • Adquirir una suscripción y vincularla a tu cuenta

Pasos

Creando un grupo de recursos

Creando un grupo de recursos y asignarle un nombre como azure-data-factory

Dentro de este grupo crearemos una cuenta de almacenamiento (Storage account) y una Data Factory.

Cuenta de almacenamiento

Dentro de la cuenta de almacenamiento crearemos 2 contenedores. (ambos pueden ser de acceso privado)

  • Un contenedor que se llama input
  • Otro que se llama output  

Dentro del input vamos a cargar el movies.csv y lo cargamos.

De allí podemos ver el contenido del csv, con las columnas de id, título y género.

Usando el Data Factory

Entraremos al grupo de recursos y abriremos el data factory. Aquí hay algunos tutoriales y plantillas que podemos utilizar. Pero para este tutorial no usaremos ninguna plantilla así que nos vamos a la pestaña de autor en la esquina superior izquierda.

Para cargar los datos, emplearemos una nueva conexión y seleccionaremos la conexión por azure blob storage, le asignamos un nombre (blob), seleccionamos nuestra suscripción de azure, seleccionamos la cuenta de almcenamiento y le damos a probar la conexión.

Si está todo correcto le damos a crear.

Creando los datasets

Obtén el dataset aquí

MovieLens DataSet
Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.

Una vez lista la conexión nos vamos a la pestaña de datasets , un csv, en servicio enlazado seleccionamos el blob y buscamos nuestra carpeta de input, importamos los headers e importamos el esquema de una conexión.

Crearemos otro dataset para el output, con los mismos parámetros exceptuando el output y el import schema.

Creando un flujo de datos

Con el flujo de datos creado, podemos ver la nueva pantalla donde realizaremos todas las transformaciones

Antes de realizar algún tipo de transformación podemos darle click a data flow debug para que podamos ver la salida de cada transformación, esto se toma algo de tiempo (4min-5min).

Creando una fuente podemos ver los diferentes parámetros como el tipo de datos, transformaciones, etc.

Realizando transformaciones

Dentro del título de nuestro dataset, haré una extracción del año y crearé una columna donde colocaremos el año extraído.

Creando columna Año y obteniendo su nombre

Cabe destacar que estas transformaciones las haremos en Scala, emplearemos el siguiente código

toInteger(trim(right(title, 6), '()'))

Podemos ver en la siguiente transformación los cambios y el nuevo dataset.  

Creando columna Título

Ahora haremos un corte del año que aparece en el título con este código.

toString(left(title, length(title)-6))

Con esto , ya podemos volver a ver las transformaciones y el nuevo dataset.

Si queremos guardar, podemos darle a nuevo paso, sink y salvarlo con un nombre específico.

Para finalizar podemos darle a output to single file, en la pestaña de ajustes de el paso sink, esto es un paso algo pesado, por lo que no lo recomiendo para proyectos largos, para proyectos más grandes tendremos mejores opciones.

Colocamos el output del archivo.

Tubería de datos

Así que crearemos una nueva tubería de datos (pipeline) y seleccionaremos el data flow.

De allí le daremos click a debug para ver que todo esté bien, esto puede tomar algo de tiempo.

Al correr esto podemos volver a ver nuestro blob storage en el contenedor de almacenamiento.

Overview

De aquí podemos ver toda la operación que hemos realizado, ver los tiempos de procesamiento, etc.

Adicional

Adicional, podemos hacer múltiples transformaciones en un mismo dataset, al añadir un paso en paralelo en cualquiera de nuestros pasos previos, esto lo hacemos empleando una nueva rama.

Vamos a crear un nuevo paso que será un aggregate, le colocaremos un nombre a la columna con MoviesCount() con una función sencilla que es count().

Así nos puede aparecer diferentes años con el total de películas por año.

Y usamos de nuevo Sink empleando MoviesByYearData.

De allí lo podemos guardar en MoviesByYearData.csv

Optimización

Podemos emplear una simple partición para este dataset pequeño, esto no es recomendable para todos los tipos de datos, en especial si son muy grandes.

Para el caso de el aggregado emplearemos una partición simple, con key (llave).

Esto lo podemos hacer en el paso anterior también y reducir el tiempo de carga de esta pipeline.

Conclusiones

Herramientas como Azure Data Factory podemos realizar procesos de transformación de datos de una manera sencilla.

💡
Cabe destacar que es una herramienta potente, lo que también requiere conocimientos técnicos para aprovechar al máximo su potencial.

Video demostrativo

Decidí crear un video demostrativo por si existe algún fallo dentro del día del evento.

También sirve como ayuda si el lector se pierde algún detalle.

Referencias

Canal de Adam Marczack
Data Factory - Data Integration Service | Microsoft Azure
Learn more about Azure Data Factory, the easiest cloud-based hybrid data integration solution at an enterprise scale. Build data factories without the need to code.
Data integration using Azure Data Factory and Azure Data Share - Azure Data Factory
Copy, transform, and share data using Azure Data Factory and Azure Data Share

WhitePaper de Azure Data Factory v2

https://azure.microsoft.com/mediahandler/files/resourcefiles/azure-data-factory-data-integration-in-the-cloud/Azure_Data_Factory_Data_Integration_in_the_Cloud.pdf

Software Engineering

Fernando Cutire Twitter

Software Engineer Finishing my degree. Becoming a better friend