In Apache Airflow, i task con dipendenze complesse sono fondamentali per la gestione di flussi di lavoro avanzati. La possibilità di configurare dipendenze complesse tra i task permette di definire sequenze di esecuzione precise, garantendo che ogni task venga eseguito solo quando le condizioni necessarie sono soddisfatte.
Dipendenze lineari e fan-out/fan-in
Le dipendenze più comuni in Airflow sono:
- Lineari: Task A → Task B → Task C
- Fan-out: Un task che genera più task paralleli
- Fan-in: Più task paralleli che convergono in un singolo task
In Python, le dipendenze si definiscono con gli operatori >> e <<:
task_a >> [task_b, task_c] # fan-out
[task_b, task_c] >> task_d # fan-in
Trigger Rules
Airflow offre diverse trigger rules che determinano quando un task downstream può iniziare:
- all_success (default): il task parte solo se tutti i task upstream hanno avuto successo
- all_failed: il task parte solo se tutti i task upstream sono falliti
- all_done: il task parte quando tutti i task upstream sono completati, indipendentemente dal risultato
- one_success: il task parte appena almeno un task upstream ha successo
- one_failed: il task parte appena almeno un task upstream fallisce
- none_failed: il task parte se nessun task upstream è fallito
BranchPythonOperator
Il BranchPythonOperator permette di creare flussi di lavoro condizionali. Basandosi su una funzione Python, il DAG può seguire percorsi diversi:
def choose_branch(**context):
if context['params']['mode'] == 'full':
return 'full_processing'
return 'quick_processing'
branch = BranchPythonOperator(
task_id='branching',
python_callable=choose_branch
)
Cross-DAG Dependencies
Per dipendenze tra DAG diversi, Airflow offre:
- ExternalTaskSensor: attende il completamento di un task in un altro DAG
- TriggerDagRunOperator: avvia l'esecuzione di un altro DAG
Best Practice
- Mantieni i DAG il più semplici possibile
- Usa i gruppi di task (TaskGroup) per organizzare task correlati
- Documenta sempre le dipendenze complesse
- Testa le dipendenze con il comando
airflow dags test
Padroneggiare le dipendenze complesse in Airflow è essenziale per costruire pipeline di dati robuste e affidabili.