You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ADF Pipeline B,使其仅在Pipeline A未运行时执行?

解决ADF中Pipeline A与B的Blob冲突问题

方案1:给Pipeline B的翻滚窗口触发器加运行条件

直接在B的触发器层面做限制,只有当Pipeline A未处于运行状态时才触发:

  • 打开Pipeline B的翻滚窗口触发器配置,找到「触发条件」模块
  • 输入条件表达式:@not(contains(pipeline('Pipeline A').status, 'Running'))
  • 每次触发器到点时,会先检查A的状态,只要A处于运行中,就不会触发B的本次窗口运行

方案2:在Pipeline B内部加等待逻辑

如果触发器层面的限制不够灵活,就在B的流程开头添加判断等待逻辑:

  • 给B添加一个「Until」活动,设置终止条件为@not(contains(pipeline('Pipeline A').status, 'Running'))
  • 在Until活动内部添加一个「Wait」活动,设置等待时长(比如5分钟)
  • B被触发后,会循环检查A的状态,直到A停止运行,才会继续执行后续的清理操作

方案3:用Blob元数据做状态标记

通过给Blob X添加自定义元数据,标记是否正在被A处理:

  • 在Pipeline A的开头添加「Set Blob Metadata」活动,给Blob X设置元数据IsProcessing = 'true'
  • 在A的结尾(需覆盖成功、失败所有分支)再用「Set Blob Metadata」将IsProcessing修改为false
  • 在Pipeline B的开头添加「Get Blob Metadata」活动,获取Blob X的元数据
  • 添加「If Condition」活动,判断@equals(activity('Get Blob Metadata').output.metadata.IsProcessing, 'false'):
    • 满足条件则继续执行清理操作;不满足的话,添加「Wait」活动等待10分钟后重新检查,直到标记为false再继续

额外提醒

因为B使用的是翻滚窗口触发器且失败会自动重试,若采用方案1,触发器条件不满足时不会触发B,此时翻滚窗口的重试机制不会生效——如果需要确保每个窗口的B都能执行,更推荐方案2或3,让B触发后先等待A完成,再执行操作,避免因冲突导致失败重试。

内容的提问来源于stack exchange,提问作者Sushant Pachipulusu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:51:27