Airflow 所有成功触发规则未按预期工作

Airflow 所有成功触发规则未按预期工作,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 = {

我在工作流程中使用trigger rule=“all_success”,用于所有父任务成功,然后只触发下一个任务的场景。 但情况并非如此

工作流程:

任务1>>任务2a、任务2b、任务2c(并行运行)>>任务c

场景1-任务2a中的一个进入up_进行重试,即使任务c被执行

场景2-任务2a中的一个处于运行状态,但任务c仍在执行

注意-在所有地方,我们都将触发规则视为所有成功

在理想情况下,在所有任务2a、2b、2c成功完成之前,不应触发任务C

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我添加了一个代码模板