ADF调度配置:避免管道重叠,实现15分钟间隔无排队运行
ADF管道实现非重叠15分钟间隔运行(无积压)
针对你需要的「要么到15分钟整点触发,要么上一次运行结束后触发,且无重叠、无积压」的需求,可通过以下两种方式实现:
方法一:Tumbling Window Trigger 自定义配置
这是最贴合需求的方案,利用Tumbling Window的窗口特性,确保触发时间取窗口结束时间和上一次运行结束时间的较晚值:
- 创建15分钟窗口的Tumbling Window Trigger,窗口起始时间设为整点(如
2024-04-08T09:00:00Z)。 - 在触发器的高级设置中,勾选**「仅在前一次运行完成后才运行」**,避免管道重叠。
- 勾选**「不排队新运行」**,防止运行超时后产生积压。
- 关键配置:在触发器的延迟触发字段中,使用动态表达式计算延迟时间,确保触发时间不早于窗口结束时间:
该表达式会判断当前触发请求的时间是否早于窗口结束时间,如果是,则延迟到窗口结束时间;否则立即触发(即上一次运行结束时间晚于窗口结束时间时)。@if(less(pipeline().TriggerRunTimestamp, pipeline().TriggerWindowEnd), subtract(pipeline().TriggerWindowEnd, pipeline().TriggerRunTimestamp), '00:00:00')
方法二:Schedule Trigger + 管道内等待逻辑
如果Tumbling Window的配置无法满足需求,可结合Schedule Trigger和管道内的等待逻辑实现:
- 创建15分钟间隔的Schedule Trigger,勾选**「如果前一次运行正在进行,则不创建新运行」**,避免重叠。
- 在管道开头添加等待(Wait)活动,计算需要等待的时间:
- 使用查找(Lookup)活动调用ADF的
Get Pipeline RunsAPI,获取上一次管道的运行结束时间。 - 计算下一个15分钟整点时间(如当前时间是09:13,则下一个整点是09:15)。
- 取「上一次运行结束时间」和「下一个整点时间」的最大值,计算当前时间到该值的间隔,作为等待活动的等待时长。
- 如果当前时间已经晚于最大值,则等待时长设为0,直接开始管道运行。
- 使用查找(Lookup)活动调用ADF的
预期运行效果
按照上述配置,管道运行会和你给出的示例一致:
| pipelineid | pipelinename | run start | run end | status |
|---|---|---|---|---|
| 1 | realtimeLoad | 2024-04-08 09:00:00 | 2024-04-08 09:13:00 | |
| 2 | realtimeLoad | 2024-04-08 09:15:00 | 2024-04-08 09:33:00 | |
| 3 | realtimeLoad | 2024-04-08 09:33:00 | 2024-04-08 09:45:00 |
内容的提问来源于stack exchange,提问作者nowYouSeeMe
相关产品推荐
相关产品推荐

