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

27 de octubre, 2025

¡Hola a todos! 👩‍💻

Estoy en este viaje de introducirme al mundo del los datos y es normal que al buscar que 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:

  • Extraer (E) datos de la API de OpenWeatherMap (gracias por los datos gratis 🙏).
  • Transformar (T) ese JSON (que es un poco caótico) en una tabla bonita y limpia usando Pandas.
  • Cargar (L) 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, tome algunas decisiones.

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

Mi instinto fue: "¡Listo! Hago el script y uso un cronjob (el Programador de Tareas de Linux/Mac) 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.

Aquí es donde me recomendaron usar Apache Airflow.

Al principio, me pareció demasiado para un proyecto tan simple. ¿Levantar todo un sistema de contenedores solo para llamar a una API?

Pero aquí está el "clic" que hice: Airflow no es solo un programador de tareas. Es un orquestador.

Eso significa que me da un dashboard increíble (localhost:8080) donde puedo ver:

  • Cada vez que mi pipeline ha corrido.
  • Si falló (¡un círculo rojo!).
  • Por qué falló (¡los logs exactos!).
  • Reintentar la tarea con un solo clic.

Decisión N° 1: Adiós cronjob. ¡Hola Airflow! Entendiendo la importancia de la observabilidad.

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): Básicamente, le pides a Airflow que ejecute una función de Python. El problema es que Airflow comparte su entorno con todos tus proyectos. Si mi pipeline_clima necesita pandas 1.5 y mi futuro pipeline_reddit necesita pandas 2.0... todo deja de funcionar.

  • 2. El Camino "Pro" (DockerOperator):. En lugar de que Airflow ejecute mi código, le digo a Airflow que haga algo mucho más inteligente:

    "Oye Airflow, ¿podrías decirle a Docker que levante esa 'caja' (contenedor) que ya preparé? Se llama weather_etl_pipeline. Dentro de esa caja ya está mi script de Python, Pandas, y todo lo que necesita. No te preocupes por mis dependencias. Solo ejecútalo y avísame si termina bien."

    ¡Esto es genial! Cada proyecto mío vive en su propia burbuja (contenedor). 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, entendiendo las redes de Docker y configurando las Variables de Airflow,finalmente el circulo verde de "success" en mi DAG de Airflow me confirmo que todo corría de forma correcta.

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!)

La mejor parte de construir algo es poder compartirlo. He puesto todo el proyecto en mi GitHub, con un README.md súper detallado que explica (con suerte, de forma clara) cómo puedes levantarlo en tu propia computadora con un solo comando.

¡En serio, es casi un solo comando!

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. 🤓

¡Gracias por leer!