成功或失败时运行任务,但跳过时不运行

时间:2019-02-20 20:14:51

标签: airflow

如果上游任务成功或失败,是否有一种方法可以运行任务,但是如果跳过上游任务,则无法运行该任务?

我对使用trigger_rule参数as mentioned in this other questionall_done很熟悉,但是当跳过上游时会触发任务。我只希望任务在上游任务成功或失败时触发。

1 个答案:

答案 0 :(得分:2)

我不认为成功和失败有触发规则。您可以做的是设置重复的任务,一个任务使用触发规则all_success,另一个任务使用触发规则all_failed。这样,仅当重复任务之前的父项失败/成功时才触发重复任务。

我在下面提供了代码,供您轻松测试预期结果。

因此,假设您有三个任务。

  • task1是您的成功/失败
  • task2是您唯一的成功任务
  • task3仅是您的失败

    #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)
    

希望这会有所帮助!