如何用ADF的ForEach与Execute Pipeline执行文件夹内所有管道
实现ADF指定文件夹下所有管道自动执行的方案
步骤1:动态获取目标文件夹的管道列表
ADF没有内置活动直接读取管道列表,需通过Web活动调用ARM API获取工厂内所有管道,再筛选出目标文件夹的管道:
- 配置Web活动:
- URL:
https://management.azure.com/subscriptions/{订阅ID}/resourceGroups/{资源组名称}/providers/Microsoft.DataFactory/factories/{ADF工厂名称}/pipelines?api-version=2018-06-01 - 请求方法:GET
- 身份验证:选择MSI,资源填写
https://management.azure.com/
- URL:
- 筛选目标文件夹管道:用表达式从Web活动返回结果中过滤,比如目标文件夹路径为
/ETL/SubFolder,表达式如下:
注:若管道在根目录,@filter(activity('获取管道列表').output.value, item().folder?.name == '/ETL/SubFolder')folder属性不存在,需调整判断逻辑(比如@empty(item().folder))。
步骤2:用ForEach活动遍历执行管道
将筛选后的管道列表传入ForEach,逐个触发执行:
- ForEach的Items属性填写上述筛选表达式,或先将筛选结果存入变量再引用变量
- ForEach内部添加Execute Pipeline活动:
- 管道名称:用动态内容
@item().name直接引用当前遍历到的管道名 - 子管道参数:若需传递参数,根据子管道的参数配置动态内容即可
- 管道名称:用动态内容
步骤3:关键优化与注意事项
- 执行模式:ForEach默认并行执行(最大20并发),需串行执行则将Sequential属性设为
true - 权限配置:确保ADF托管标识(MSI)拥有当前工厂的
Microsoft.DataFactory/factories/pipelines/read和Microsoft.DataFactory/factories/pipelines/run/action权限,否则无法获取列表和触发管道 - 错误处理:可开启ForEach的ContinueOnError属性为
true,避免单个子管道失败中断整个父管道;也可在Execute Pipeline后添加日志活动记录失败信息
内容的提问来源于stack exchange,提问作者GuanSe
相关产品推荐
相关产品推荐

