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

如何在Databricks中调度每月首个工作日执行的任务(无需ADF)

在Databricks中实现每月首个工作日任务调度

由于纯Cron表达式无法直接实现“每月首个工作日”的动态逻辑(Cron仅支持固定日期/星期等静态规则),可以通过Cron覆盖候选日期+任务内日期校验的方式实现,无需依赖ADF等外部服务,具体步骤如下:

步骤1:设置Cron调度规则

在Databricks任务的调度配置中,设置Cron表达式覆盖每月可能出现首个工作日的日期范围:

0 0 9 1-5 * ?

这个表达式表示每月1日至5日的上午9点触发任务(每月首个工作日最早是1号,最晚不会超过5号:比如1号是周六,首个工作日是3号;1号是周日,首个工作日是2号;1号是周五则直接为1号)。

步骤2:在任务开头添加日期校验逻辑

在任务的执行代码(Python/Scala)开头加入判断,只有当当天是当月首个工作日时,才继续执行后续任务逻辑,否则直接终止。

Python示例代码:

import datetime
from datetime import timedelta

def is_first_workday():
    today = datetime.date.today()
    # 获取当月第一天
    first_day = today.replace(day=1)
    
    # 情况1:当月第一天是工作日(周一至周五,weekday从0=周一到4=周五)
    if first_day.weekday() <= 4:
        return today == first_day
    # 情况2:当月第一天是周末,计算首个工作日
    else:
        # 周六(weekday=5)加2天到周一,周日(weekday=6)加1天到周一
        days_to_add = 2 if first_day.weekday() == 5 else 1
        first_workday = first_day + timedelta(days=days_to_add)
        return today == first_workday

# 校验不通过则终止任务
if not is_first_workday():
    print("今日非当月首个工作日,任务终止")
    exit()

# 此处编写你的核心任务逻辑
print("开始执行月度任务...")

可选:加入法定节假日校验

如果需要排除法定节假日,可以维护一个节假日列表,在校验逻辑中额外判断:

# 示例:自定义节假日列表(格式为YYYY-MM-DD)
holidays = ["2024-10-01", "2024-10-02"]

def is_first_workday():
    today = datetime.date.today()
    # 先判断是否为节假日
    if today.strftime("%Y-%m-%d") in holidays:
        return False
    # 后续逻辑同之前的代码...

步骤3:验证调度逻辑

可以通过手动触发任务测试校验逻辑:

  • 选择非首个工作日的日期触发,任务会直接终止
  • 选择首个工作日的日期触发,任务会执行核心逻辑

内容的提问来源于stack exchange,提问作者Deepak Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:40:06