我需要一个 Databricks 作业在每月第一个星期一之后的星期三运行。或者相同:第一个星期一后的两天。
我发现每月第一个星期三的 Cron
0 30 6 ? * 4#1
但是由于该工作依赖于我们在每月第一个星期一生成的数据,因此如果星期三是每月的第一或第二个,则该工作将不起作用。
非常感谢任何帮助!
Quartz cron 表达式无法处理这样的复杂模式;正如您所指出的,它可以单独完成的最接近的是每月的第 N 个星期一或星期三。
作为解决方法,您可以使用每周三的 cron 计划:
0 0 0 ? * WED
,然后在代码中实现其余的计划逻辑。在 Python 中,这可能看起来像这样:
from datetime import datetime, timedelta
def should_run() -> bool:
today = datetime.today()
first = today.replace(day=1)
days_to_first_monday = (7 - first.weekday() + 0) % 7
first_monday = first + timedelta(days=days_to_first_monday)
two_days_after_first_monday = first_monday + timedelta(days=2)
return today.date() == two_days_after_first_monday.date()
if not should_run():
dbutils.notebook.exit(f"{datetime.today().date()} is not the Wednesday after the first Monday of the month. Job run will be skipped this time.")