Выполнить задачу при успехе или неудаче, но не при пропуске - PullRequest
0 голосов
/ 20 февраля 2019

Есть ли способ запустить задачу, если восходящая задача была успешной или неудачной, но нет, если восходящая была пропущена?

Я знаком с trigger_rule с параметром all_done, какупомянутый в этом другом вопросе , но это вызывает задачу, когда восходящий поток был пропущен.Я хочу, чтобы задача выполнялась только при успешном или неудачном выполнении задачи верхнего уровня.

1 Ответ

0 голосов
/ 20 февраля 2019

Я не верю, что есть триггерное правило для успеха и неудачи.То, что вы могли бы сделать, это настроить дублирующие задачи, одну с правилом триггера all_success и одну с правилом триггера all_failed.Таким образом, дублирующее задание запускается только в том случае, если родители, опережающие его, терпят неудачу / успешно.

Я включил приведенный ниже код, чтобы вы могли легко проверить ожидаемые результаты.

Итак, скажем, у вас есть три задачи.

  • задача 1 - ваш успех / неудача
  • задача 2 - ваша задача только для успеха
  • задача 3 - ваша ошибка только

    #dags/latest_only_with_trigger.py
    import datetime as dt
    
    from airflow.models import DAG
    from airflow.operators.dummy_operator import DummyOperator
    from airflow.utils.trigger_rule import TriggerRule
    
    
    dag = DAG(
    dag_id='stackoverflowtest',
    schedule_interval=dt.timedelta(minutes=5),
    start_date=dt.datetime(2019, 2, 20)
    )
    
    task1 = DummyOperator(task_id='task1', dag=dag)
    task2 = DummyOperator(task_id='task2', dag=dag,
                          trigger_rule=TriggerRule.all_success)
    task3 = DummyOperator(task_id='task3', dag=dag
                          trigger_rule=TriggerRule.all_failed)
    
    ###### ORCHESTRATION ###
    task2.set_upstream(task1)
    task3.set_upstream(task1)
    

Надеюсь, это поможет!

...