Airflow 所有成功触发规则未按预期工作
我在工作流程中使用trigger rule=“all_success”,用于所有父任务成功,然后只触发下一个任务的场景。 但情况并非如此 工作流程: 任务1>>任务2a、任务2b、任务2c(并行运行)>>任务c 场景1-任务2a中的一个进入up_进行重试,即使任务c被执行 场景2-任务2a中的一个处于运行状态,但任务c仍在执行 注意-在所有地方,我们都将触发规则视为所有成功 在理想情况下,在所有任务2a、2b、2c成功完成之前,不应触发任务CAirflow 所有成功触发规则未按预期工作,airflow,Airflow,我在工作流程中使用trigger rule=“all_success”,用于所有父任务成功,然后只触发下一个任务的场景。 但情况并非如此 工作流程: 任务1>>任务2a、任务2b、任务2c(并行运行)>>任务c 场景1-任务2a中的一个进入up_进行重试,即使任务c被执行 场景2-任务2a中的一个处于运行状态,但任务c仍在执行 注意-在所有地方,我们都将触发规则视为所有成功 在理想情况下,在所有任务2a、2b、2c成功完成之前,不应触发任务C query_template_dict = {
query_template_dict = {
'partner_list' = ['val1', 'val2']
'google_project': 'project_name',
'queries': {
'layer3': {
'template': 'temp.sql'
}
},
'applicable_tasks': {
'val1': {
'table_layer3': ['activity']
},
'val2': {
'table_layer3': ['activity'],
}
}
}
for partner in query_template_dict['partner_list']:
# Loop over applicable report queries for a partner
applicable_tasks = query_template_dict['applicable_tasks'][partner].keys()
for task in applicable_tasks:
query_params=[
{
"name": "col1",
"parameterType": { "type": "STRING" },
"parameterValue": { "value": col1}
}
]
run_bq_cmd = BigQueryOperator (
task_id =partner + '-' + task
trigger_rule ='all_success',
allow_large_results =True,
dag=dag
)
# Creating dependency on previous tasks
run_dummy >> run_bq_cmd
for sub_tasks in query_template_dict['applicable_tasks'][partner][task]:
run_sub_task = BashOperator(task_id = partner+ '_' + task + '_' + sub_tasks,
bash_command = bash_command,
trigger_rule= 'all_success',
dag = dag
)
run_bq_cmd >> run_sub_task
bash_command = <some bash command>
end_task = BashOperator( task_id = 'end_task',
bash_command= bash_command,
trigger_rule= 'all_success',
dag= dag
)
# Creating dependency on previous tasks
run_sub_task >> end_task
query\u template\u dict={
'合作伙伴列表'=['val1','val2']
“谷歌项目”:“项目名称”,
“查询”:{
“第三层”:{
“模板”:“临时sql”
}
},
“适用的任务”:{
“val1”:{
“表3”:[“活动”]
},
“瓦尔2”:{
“表3”:[“活动”],
}
}
}
对于查询模板[partner\u list]中的合作伙伴:
#循环查看合作伙伴的适用报告查询
适用的任务=查询模板[适用的任务][partner].keys()
对于适用的_任务中的任务:
查询参数=[
{
“名称”:“col1”,
“parameterType”:{“type”:“STRING”},
“参数值”:{“值”:col1}
}
]
run\u bq\u cmd=BigQueryOperator(
task_id=合作伙伴+'-'+任务
触发\u rule='all\u success',
允许\u大\u结果=真,
dag=dag
)
#创建对以前任务的依赖关系
运行\u虚拟>>运行\u bq\u cmd
对于查询模板中的子任务[适用任务][合作伙伴][任务]:
运行子任务=bash运算符(任务id=partner+''''''.'任务+'.'子任务),
bash\u命令=bash\u命令,
触发规则='all_success',
dag=dag
)
运行\u bq\u cmd>>运行\u子任务
bash_命令=
end_task=bash运算符(task_id='end_task',
bash\u命令=bash\u命令,
触发规则='all_success',
dag=dag
)
#创建对以前任务的依赖关系
运行子任务>>结束任务
即使多个父任务(运行子任务)尚未完成,也会调用结束任务
有人能帮上忙吗?如果您能从图形的角度看到子任务和结束任务正确链接,是否已在Airfow UI中检查 我认为您没有很好地设置依赖项,而且您似乎在实例化其父任务的同一循环中实例化了
end\u task
。试着做一些类似的事情:
for partner in query_template_dict['partner_list']:
# your previous code ...
# ...
# ...
bash_command = <some bash command>
end_task = BashOperator( task_id = 'end_task',
bash_command= bash_command,
trigger_rule= 'all_success',
dag= dag
)
for sub_tasks in query_template_dict['applicable_tasks'][partner][task]:
run_sub_task = BashOperator(task_id = partner+ '_' + task + '_' + sub_tasks,
bash_command = bash_command,
trigger_rule= 'all_success',
dag = dag
)
# Create dependency on previous and next tasks
run_bq_cmd >> run_sub_task >> end_task
查询模板[partner\u list]中的合作伙伴的:
#您以前的代码。。。
# ...
# ...
bash_命令=
end_task=bash运算符(task_id='end_task',
bash\u命令=bash\u命令,
触发规则='all_success',
dag=dag
)
对于查询模板中的子任务[适用任务][合作伙伴][任务]:
运行子任务=bash运算符(任务id=partner+''''''.'任务+'.'子任务),
bash\u命令=bash\u命令,
触发规则='all_success',
dag=dag
)
#创建对上一个和下一个任务的依赖关系
运行任务>运行子任务>结束任务
您能否提供一些最低限度的代码来显示您的设置?如何设置依赖项?@UJIN我添加了一个代码模板