在我的DAG中,要跳过一个依赖于标志的任务(oracle_merge_hist_orig)。
我的逻辑是:
当oracle_branch = True执行[merge_op,update_table_op,table_count_op]
当oracle_branch = False时,执行[update_table_op,table_count_op]
我尝试如下使用BranchPythonOperator:
args = {
'owner': 'Airflow',
'start_date': airflow.utils.dates.days_ago(2),
}
oracle_branch = True
def branch_func():
if oracle_branch:
return "oracle_branch"
else:
return "normal_branch"
dag = DAG(
dag_id='example_branch_operator',
default_args=args,
schedule_interval="@daily",
)
branching_op = BranchPythonOperator(
task_id='branch_shall_run_oracle_merge_original_hist',
python_callable=branch_func,
dag= dag)
oracle_branch = DummyOperator(
task_id='oracle_branch',
dag=dag)
normal_branch = DummyOperator(
task_id='normal_branch',
dag=dag)
merge_op = DummyOperator(
task_id='oracle_merge_hist_orig',
dag=dag,
)
update_table_op = DummyOperator(
task_id='update_table_job',
dag=dag,
)
table_count_op = DummyOperator(
task_id='table_count',
dag=dag,
)
branching_op >> [oracle_branch,normal_branch]
normal_branch >> update_table_op >> table_count_op
oracle_branch >> merge_op >> update_table_op >> table_count_op
但是,不是跳过任务,而是跳过了整个路径。
如何解决此问题,以便仅跳过“ racle_merge_hist_orig”任务?
答案 0 :(得分:1)
每个任务都会有一个trigger_rule
,默认情况下它设置为all_success
。我们可以将其覆盖为here列出的其他值。
在DAG中,update_table_job
任务有两个上游任务。由于其上游任务之一处于skipped
状态,因此它也进入了skipped
状态。我们可以通过将trigger_rule
的默认值覆盖为 one_success
来避免这种情况,如下所示。
update_table_op = DummyOperator(
task_id='update_table_job',
trigger_rule='one_success',
dag=dag
)