In Apache Airflow, i Trigger e i Sensori sono strumenti potenti per monitorare e reagire a eventi esterni o condizioni specifiche. I sensori attendono che una condizione venga soddisfatta prima di eseguire i task successivi, rendendoli ideali per pipeline event-driven.
Cos'è un Sensor in Airflow
Un Sensor è un tipo speciale di operatore che attende il verificarsi di una condizione. A differenza degli operatori standard che eseguono un'azione e terminano, i sensori "pollingano" periodicamente fino a quando la condizione non è soddisfatta.
Sensori più utilizzati
FileSensor
Attende la comparsa di un file nel filesystem:
file_sensor = FileSensor(
task_id='wait_for_file',
filepath='/data/input/daily_export.csv',
poke_interval=60, # controlla ogni 60 secondi
timeout=3600, # timeout dopo 1 ora
)
HttpSensor
Verifica che un endpoint HTTP restituisca una risposta positiva:
http_sensor = HttpSensor(
task_id='check_api',
http_conn_id='my_api',
endpoint='health',
response_check=lambda r: r.status_code == 200,
)
SqlSensor
Attende che una query SQL restituisca un risultato non vuoto:
sql_sensor = SqlSensor(
task_id='wait_for_data',
conn_id='my_database',
sql="SELECT COUNT(*) FROM orders WHERE date = '{{ ds }}'",
)
ExternalTaskSensor
Attende il completamento di un task in un altro DAG:
external_sensor = ExternalTaskSensor(
task_id='wait_for_upstream',
external_dag_id='upstream_dag',
external_task_id='final_task',
)
Modalità di Poking
- poke: il sensore occupa un worker slot mentre attende
- reschedule: il sensore rilascia il worker slot tra un controllo e l'altro (consigliato)
Deferrable Operators (Airflow 2.2+)
A partire da Airflow 2.2, i Deferrable Operators permettono ai sensori di sospendersi completamente, liberando risorse del worker. Il trigger viene gestito da un processo separato chiamato Triggerer.
Best Practice
- Usa sempre un timeout per evitare sensori che girano all'infinito
- Preferisci la modalità reschedule per sensori con tempi di attesa lunghi
- Usa i Deferrable Operators quando possibile (Airflow 2.2+)
- Imposta un
poke_intervalappropriato per non sovraccaricare le risorse
I sensori sono uno strumento fondamentale per costruire pipeline di dati event-driven e reattive.