Data Engineer 201 el paso al control de tus datos
Entendiendo lo que vimos en el post anterior, existen múltiples formas de tener obtener y trasladar información, el proceso rústico del ETL nos dio una buena señal que uno puede obtener información, transformarla y cargarla donde veamos adecuado. El asunto que por sí solo esto no se sostiene. La ejecución anterior sólo permite que se realice en un entorno local, con límite de recursos y un pobre performance (Sorpresa!!!! El data engineer sí tiene que velar por el rendimiento del pipeline de datos).
Por lo tanto, quiero mostrarles la siguiente capa en el mundo de la data: la orquestación de los procesos. Y cuando hablo de orquestación, múltiples herramientas se te pueden venir a la mente pero por espacio/disposición y efectos prácticos lo limitare a Airflow. (Luigi, cloud functions y quiza argo events podrian ayudar)
Al introducirnos al mundo de Apache Airflow, hay que entender que en primera instancia y por sobre todo, airflow es un orquestador de procesos, por lo mismo es posee herramientas de scheduler para generar mallas de procesos. Algo vital hoy en día cuando necesitas ejecutar de manera ordenada y a ciertos horarios/eventos los procesos que requieras.
El segundo término es el cómo hace esto, y ahí surge el término DAG el cual significa Directed Acyclic Graph, y si recuerdas algo de la teoría de grafos podrias entender que en la practica un DAG es un nodo sin ciclos pero que apunta a un siguiente nodo (o a varios, incluso de manera paralela dependiendo del dev)
Pero mi proyecto ya me permitia tener la data del sitio, dejemos el código en una virtual machine/cloud function y no tengo que estudiar mas
Bueno… la cita lo dice todo…. fin del post
El problema es que un proceso de manera aislada puede ser ejecutado pero cuando las dependencias de data, procesos o la necesidad de precisión quirúrgica al ejecutar estos procesos un simple cron, no te lo permite hacer sin posibles falencias.
Y ahora al código!
El ejercicio de este post, nos permite hacer la ingesta de 2 fuentes de datos muy distintas, que fueron adaptadas de una manera muy simple para tener una estructura común, y nos permite entender que los procesos que se ven en el Data Engineering, nunca son simples.
Múltiples Fuentes de datos, significa que existen múltiples formas de estructurar la data en una organización, por lo tanto al momento de ingestar data pueden existir tanto dependencias como necesidades particulares en la data y eso nos lleva a que una herramienta que nos permite orquestar aquellos procesos. Vale su peso en oro ( las nubes hicieron una abstracción de airflow sólo por el valor que posee como herramienta)
El proceso en si es simple, intente obtener información de 2 sitios getonboard y laborum, las cuales con ayuda de un scraper y en otro su API, logré llevar a una base de datos sqlite,
Podemos discutir el código implementado si… el cual a simple vista es un código desordenado lo cual fue hecho de esta forma, el mundo no es bonito, los devs programan según su expertise y nunca existe el tiempo para refactorizar, pero intencionalmente, quise demostrar múltiples formas de utilizar airflow con pythonOperator y salir victorioso con una ingesta a RAW (este tipo de ingesta se le denomina cuando la data llega pero no se le genera ninguna transformación)
Y la ejecución de este código, demuestra que lejos de ser perfecto finalmente se pudo unificar diversas fuentes de datos. Desde diversas bases de datos en una base de dato unificada (inicialmente iba a ser bigquery, pero nos faltan algunos post para contextualizar antes)
Entonces, no quiero en sólo dar un sermón sobre que existe una herramienta que nos permite orquestar scripts de python (java,go también es soportado). veamos el código y repasemos.
Tareas para Este proceso
- Instalar y ejecutar airflow
- Estudiar/Desarrollar tus scripts y dag
- Instalación de librerías
- Testear
Instalar y ejecutar airflow
La instalación de tu librería airflow debe ser lo primero junto con Crear un ambiente virtual con python, posterior a esto ingresa a tu navegador e ingresa a http://localhost:8080/
sudo pip3 install virtualenv sudo pip3 install apache-airflow virtualenv -p python3 airflow_venv source airflow_venv/bin/activate airflow webserver airflow scheduler
Estudiar/Desarrollar tus scripts y dag
Generalmente prefiero crear un script simple de python, donde pruebo mis funciones con antelación antes de enviarlas a un dag, es más, en algunos casos creo librerías, en otro simplemente hardcodeado sobre el dag, cual es mejor y peor, eso te lo dice la experiencia
touch airflow/dags/script.py touch airflow/dags/dag.py
Instalación de librerías
Al ser un ambiente nuevo, posiblemente muchas de las librerías no vengan, por lo cual nunca es malo generar tu archivo requirements.txt e instalar lo requerido.
sudo pip3 install pandas
Testear
Esta es la parte final y la más difícil, el testeo a de tu código, no es simple, probar que funcionalmente hace las tareas es un punto, también tenemos la necesidad de probar componentes por separado o tener resultados objetivos, esto dificulta enormemente tener éxito en tu proyecto.
finalmente dentro de las opciones de airflow, uno puede ejecutar de manera manual el trigger o configurarlo para la periodicidad que uno guste.
Con esto cierro el 2 post de Data Engineer ETL y voy abriendo paso a la parte de transformación y finalmente entrenar un modelo de machine learning. Literalmente estamos a tono con el nombre del blog Feeding The Machine con datos.
Recursos para entender sqlite, airflow con profundidad puedes ver en estos links.
- https://www.sqlalchemy.org/
- https://airflow.apache.org/docs/apache-airflow/stable/start/index.html
- https://dbeaver.io/download/
Estaré atento a sus comentarios!!!!!