web-dev-qa-db-fra.com

Le flux d'air dépend de sur le DAG entier

Existe-t-il un moyen dans le flux d'air d'utiliser le depends_on_past pour un DagRun entier, pas seulement appliqué à une tâche?

J'ai un DAG quotidien et le DagRun du vendredi s'est trompé sur la 4ème tâche, mais les DagRuns du samedi et du dimanche ont toujours fonctionné comme prévu. En utilisant depends_on_past = True aurait interrompu le DagRun sur la même 4ème tâche, mais les 3 premières tâches auraient quand même été exécutées.

Je peux voir dans la table DB DagRun qu'il y a une colonne state qui contient failed pour le Friday DagRun. Ce que je veux, c'est un moyen de configurer un DagRun pour ne pas démarrer si le DagRun précédent a échoué, ne pas démarrer et s'exécuter jusqu'à trouver une tâche qui a précédemment échoué.

Est-ce que quelqu'un sait si c'est possible?

9
chop4433

Lors de votre première tâche, définissez depends_on_past=True et wait_for_downstream=True, la combinaison se traduira par les exécutions en cours d'exécution en cours uniquement si la dernière exécution a réussi.

Parce qu'en définissant la première tâche au niveau du dag-run en cours, la précédente (depend_on_past) et toutes les tâches (wait_for_downstream) réussiront

9
WeiChing Lin

Une solution possible serait d'utiliser xcom:

  1. Ajouter 2 PythonOperators start_task et end_task au DAG.
  2. Faites en sorte que toutes les autres tâches dépendent de start_task
  3. Faire end_task dépend de toutes les autres tâches (set_upstream).
  4. end_task poussera toujours une variable last_success = context['execution_date'] à xcom (xcom_Push). (A besoin provide_context = True dans les PythonOperators).
  5. Et start_task vérifiera toujours xcom (xcom_pull) pour voir s'il existe un last_success variable avec une valeur égale à la date d'exécution du DagRun précédente ou à la date de début du DAG (pour laisser le processus démarrer).

Exemple d'utilisation de xcom:
https://github.com/Apache/incubator-airflow/blob/master/airflow/example_dags/example_xcom.py

3
Joe Samanek