Concepto clave
En Apache Airflow, los operadores son las unidades básicas de trabajo que ejecutan tareas específicas dentro de un DAG. Piensa en ellos como los trabajadores especializados en una línea de producción: cada uno sabe exactamente qué hacer (extraer datos, transformarlos, cargarlos) y solo necesita las instrucciones correctas para ejecutarse.
Los sensores, por otro lado, son operadores especializados que esperan por una condición externa antes de continuar. Imagina un inspector de calidad que verifica que la materia prima llegó antes de permitir que comience el proceso de transformación. En ETL, esto se traduce en esperar por la llegada de un archivo, la disponibilidad de una base de datos, o la finalización de otro proceso.
Cómo funciona en la práctica
Veamos un ejemplo paso a paso de un pipeline ETL que procesa datos de ventas diarias:
- Un
FileSensormonitorea un directorio FTP esperando el archivoventas_diarias.csv - Cuando el archivo aparece, un
PythonOperatorextrae los datos y los valida - Un
BashOperatorejecuta un script de transformación que calcula métricas clave - Finalmente, un
PostgresOperatorcarga los resultados transformados a la base de datos de reporting
Cada operador se define con sus parámetros específicos y se encadena mediante dependencias para crear el flujo completo.
Caso de estudio
Una empresa de retail necesita procesar datos de inventario desde múltiples fuentes:
| Fuente | Operador utilizado | Frecuencia |
|---|---|---|
| API REST de proveedor | HttpSensor + PythonOperator | Cada hora |
| Archivos CSV en S3 | S3KeySensor + FileTransformOperator | Diario |
| Base de datos transaccional | SqlSensor + MySqlOperator | En tiempo real |
El sensor S3KeySensor redujo los errores por archivos incompletos en un 85% al verificar que el archivo tenga el tamaño esperado antes de procesarlo.
Errores comunes
- Timeout demasiado corto en sensores: Configurar
timeoutmuy bajo hace que los sensores fallen prematuramente. Solución: Calcular el tiempo máximo realista de espera y agregar un margen del 20%. - Operadores bloqueantes en bucles: Usar
whileloops dentro de PythonOperator puede bloquear el scheduler. Solución: Implementar lógica asíncrona o usar sensores especializados. - Falta de manejo de fallos: No configurar
retriesyretry_delayen operadores críticos. Solución: Definir políticas de reintento basadas en la criticidad de cada tarea. - Dependencias circulares: Crear ciclos donde el operador A depende de B y B depende de A. Solución: Usar herramientas de validación de DAGs antes del despliegue.
Checklist de dominio
- Puedo seleccionar el operador correcto para cada tipo de tarea ETL (extracción, transformación, carga)
- Sé configurar sensores con condiciones específicas y tiempos de espera apropiados
- Entiendo cómo encadenar operadores y sensores para crear flujos lógicos
- Puedo implementar manejo de errores y políticas de reintento
- Conozco la diferencia entre operadores estándar y custom operators
- Sé monitorear y debuggear la ejecución de operadores en tiempo real
- Puedo optimizar el uso de recursos entre operadores concurrentes
Implementa un pipeline ETL con sensores y operadores especializados
Construye un DAG que procese datos meteorológicos desde múltiples fuentes:
- Crea un sensor que espere por un archivo JSON en
/data/weathercon el patrónweather_*.json - Implementa un operador que valide la estructura del JSON (debe contener temperatura, humedad y timestamp)
- Agrega un operador de transformación que convierta temperaturas de Fahrenheit a Celsius
- Configura un operador que cargue los datos validados y transformados a una tabla PostgreSQL
- Define dependencias apropiadas entre todas las tareas
- Agrega manejo de errores con 3 reintentos y delay exponencial
Entrega el código Python completo del DAG.
Pistas- Usa FileSensor con mode='poke' para el monitoreo de archivos
- Considera usar JsonSchemaValidatorOperator para validación estructural
- Recuerda que PostgreSQLOperator requiere configuración de conexión previa
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.