MIS NOTAS

Mi primer pipeline de datos: Un viaje con Airflow, Docker y PostgreSQL

¡Hola a todos! 👩‍💻 Estoy en este viaje de introducirme al mundo de los datos y es normal que al buscar qué camino seguir, el consejo número uno es: "¡construye proyectos!".

Pero, honestamente, no quería hacer solo un script de Python que corres una vez desde tu terminal y ya. Quería construir algo que se sintiera... real. Algo que pudiera fallar a las 3 AM y yo pudiera saber por qué (¡y, con suerte, que se arreglara solo!).

Así que me propuse un desafío: construir un pipeline de datos del clima.

La idea del proyecto

El objetivo sonaba bastante simple:

  • E Extraer: datos de la API de OpenWeatherMap (gracias por los datos gratis 🙏).
  • T Transformar: ese JSON (que es un poco caótico) en una tabla bonita y limpia usando Pandas.
  • L Cargar: esos datos limpios en una base de datos PostgreSQL.

Fácil, ¿no? Podría haber hecho esto en un solo archivo de Python y terminar en menos de una hora. ...Pero, tomé algunas decisiones.


¿Un cronjob o... algo más?

Mi instinto fue: "¡Listo! Hago el script y uso un cronjob para que se ejecute cada hora". Problema resuelto.

Pero mientras más leía, más veía que eso era una "mala práctica" en el mundo real. ¿Qué pasa si la API falla? ¿Qué pasa si mi script se rompe? El cronjob no me va a avisar; simplemente fallará en silencio.

Decisión N° 1

Adiós cronjob. ¡Hola Airflow!

Airflow no es solo un programador. Es un orquestador. Me da observabilidad (logs, reintentos, dashboard visual) que un script suelto nunca tendría.

El dilema de las dependencias

Okey, así que iba a usar Airflow. Pero, ¿cómo ejecuta Airflow mi script de Python? Aprendí que había dos caminos:

1. El Camino "Fácil"

PythonOperator

Airflow ejecuta una función Python directamente. El problema: Comparte entorno. Si un pipeline necesita pandas 1.5 y otro pandas 2.0... todo explota.

2. El Camino "Pro"

DockerOperator

"Oye Airflow, dile a Docker que levante esa caja aislada". La ventaja: Cada proyecto vive en su propia burbuja. Nada choca con nada.

Decisión N° 2

Usar el DockerOperator.

Fue más difícil de configurar, pero me alineaba con la idea de construir sistemas aislados y escalables.

¿Funcionó? ¡Sí!

Después de (muchas) horas peleándome con archivos docker-compose.yml y entendiendo las redes de Docker, finalmente vi el círculo verde de "success" en mi DAG.

Como prueba final, verifiqué en mi cliente de base de datos favorito, TablePlus, y... ¡AHÍ ESTABAN! Los datos del clima, limpios y ordenados en mi tabla de PostgreSQL.

¿Quieres probarlo? (¡O ver mi código!)

He puesto todo el proyecto en mi GitHub, con un README.md súper detallado para levantarlo con un solo comando.

Ver proyecto en GitHub

Lo que me llevo de esto...

Este proyecto me enseñó que la Ingeniería de Datos no es solo escribir Python o SQL. Es arquitectura de sistemas, todo un entramado de decisiones y pensamiento sistémico. Es pensar en "qué pasa si...", "cómo escalará esto" y "cómo sabré si se rompe".

Honestamente, me encantó, y será el principio de mucho más. 🤓

Estefanía Turín • Oct 27, 2025