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

如何在Azure Data Factory中调度每月第10个工作日运行的管道

在Azure Data Factory中实现每月第10个工作日的管道调度

针对你需要每月在排除周六周日后的第10个工作日运行管道的需求,这里提供两种可行的实现方案,其中第一种适配你尝试过的Tumbling Window Trigger:

方案1:Tumbling Window Trigger + 自定义触发条件

这个方案让触发器每天检查一次,仅在符合"当月第10个工作日"条件时执行管道:

  1. 创建每日Tumbling Window Trigger,窗口起始时间设为任意日期(比如2023-01-01T00:00:00Z),窗口大小设为1天,重复间隔1天。

  2. 进入触发器的Pipeline Run Conditions设置,添加自定义表达式,判断当前窗口日期是否是当月第10个工作日:

    @equals(length(filter(range(0, dayOfMonth(utcNow())), 
        @not(or(equals(dayOfWeek(addDays(startOfMonth(utcNow()), item())), 0), 
                equals(dayOfWeek(addDays(startOfMonth(utcNow()), item())), 6))
        ))), 10)
    

    表达式逻辑说明:

    • 生成当月第一天到当前日期的所有日期序列
    • 过滤掉周日(dayOfWeek返回0)和周六(返回6)的日期
    • 统计剩余工作日的数量,等于10时触发管道

    如果你的业务使用本地时区(而非UTC),请把所有utcNow()替换为convertTimeZone(utcNow(), 'UTC', '你的时区ID'),比如中国时区用'China Standard Time'。

方案2:Recurrence Trigger + 管道内条件判断

如果不想让触发器每天触发,可以用每日重复触发器结合管道内的条件分支控制执行:

  1. 创建每日Recurrence Trigger(或缩小触发范围,仅在每月前20天触发),设置重复频率为每天一次。
  2. 在管道中添加Set Variable活动,定义变量targetWorkdayDate,用以下表达式计算当月第10个工作日:
    @let(
        startOfMonth = startOfMonth(utcNow()),
        firstDayWeekday = dayOfWeek(startOfMonth),
        targetWorkday = 10,
        daysToAdd = sub(targetWorkday, 1),
        totalDays = add(daysToAdd, div(add(firstDayWeekday, daysToAdd),7)*2),
        adjustedTotalDays = if(equals(firstDayWeekday,0), add(totalDays,1), totalDays),
        targetDate = addDays(startOfMonth, adjustedTotalDays)
    )
    @targetDate
    
  3. 添加If Condition活动,判断当前日期是否等于计算出的目标工作日:
    @equals(formatDateTime(utcNow(), 'yyyy-MM-dd'), formatDateTime(variables('targetWorkdayDate'), 'yyyy-MM-dd'))
    
  4. 把需要执行的核心管道逻辑放在If Condition的"True"分支中,"False"分支直接结束管道即可。

内容的提问来源于stack exchange,提问作者Prasenjit Patnaik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:43:15