以下几种场景,以2024年11月12日~2024年11月19日执行时间为例。
假设:周一~周五为交易日,周六/周日不是交易日。
针对本场景,假设为Python任务设置计划时间为每日凌晨 00:10,可直接在代码中使用 ${calendar_day} 取值,calendar_day 参数默认读取上传调度日历文件中 schedule_date 列下的业务日期信息,若业务日期超出日历文件中的时间范围时,则会解析成 ${date} 的取值,即当前时间 -1 天。
例如在Python代码中直接输入:
print("${calendar_day}")
项目控制台添加的调度日历文件格式如下:
说明
实际配置时,仅需配置前三列,即配置 date、schedule_date、schedule 即可。
date(实例计划时间) | schedule_date(业务日期) | schedule(调度日历配置) | 实例是否运行 | 变量实际取值 | 备注 |
|---|---|---|---|---|---|
20241113 | 20241112 | TRUE | 是 | 20241112 | 周三00:10处理周二的数据 |
20241114 | 20241113 | TRUE | 是 | 20241113 | |
20241115 | 20241114 | TRUE | 是 | 20241114 | |
20241116 | 20241115 | TRUE | 是 | 20241115 | 周六00:10凌晨处理周五的数据 |
20241117 | 20241116 | FALSE | 跳过运行 | 跳过运行 | 周日00:10不执行 |
20241118 | 20241117 | FALSE | 跳过运行 | 跳过运行 | 周一00:10不执行 |
20241119 | 20241118 | TRUE | 是 | 20241118 | 周二00:10凌晨执行 |
20241120 | 20241119 | TRUE | 是 | 20241119 |
假设:周一~周五为交易日,周六/周日不是交易日。
区别于第一个场景,本场景需要处理当日的数据,因此需要将任务的计划时间设置为每日的23:00。但实际上是用前一天生成的实例加1个业务日期来实现。计划时间设置详见调度属性。
由于 ${calendar_day} 的取值逻辑通常为调度日历文件中的 schedule_date 列下的业务日期,为了计算当日数据,需要使用 ${calendar_day+1} 参数。
# 注意这里的+1,是为了当天运行处理当天的数据 print("${calendar_day+1}")
date(实例计划时间) | schedule_date(业务日期) | schedule(调度日历配置) | 实例是否运行 | 变量实际取值 | 备注 |
|---|---|---|---|---|---|
20241113 | 20241112 | TRUE | 是 | 20241113 | 周三23:00处理周三的数据 |
20241114 | 20241113 | TRUE | 是 | 20241114 | |
20241115 | 20241114 | TRUE | 是 | 20241115 | |
20241116 | 20241115 | FALSE | 跳过运行 | 跳过运行 | 周六23:00不执行 |
20241117 | 20241116 | FALSE | 跳过运行 | 跳过运行 | 周日23:00不执行 |
20241118 | 20241117 | TRUE | 是 | 20241118 | 周一23:00处理周一的数据 |
20241119 | 20241118 | TRUE | 是 | 20241119 | 周二23:00处理周二的数据 |
20241120 | 20241119 | TRUE | 是 | 20241120 |
场景 2.2 与场景 2.1 相同,都是当天晚上23:00处理当天的数据。
但场景 2.2 采用另一种方式,即通过「小时调度任务的业务日期=计划时间」来解决业务日期与计划时间匹配的问题。
由于 ${calendar_day} 的取值逻辑为业务日期,而这时候希望 ${calendar_day} 的取值逻辑与实际的计划时间相同,例如计划时间是2024-11-15 23:00,而希望业务日期的日历也这样维护,此时可采用一种间接方式处理。
Step1:将任务设置为小时调度,并设置每天仅在23:00的时间调度一次。
Step2:在任务中引用调度日历。
Step3:在小时任务中,可直接使用 ${calendar_day} 参数。
# 小时任务,计划时间与业务日期相等。 print("${calendar_day}")
date(实例计划时间) | schedule_date(业务日期) | schedule(调度日历配置) | 实例是否运行 | 变量实际取值 | 备注 |
|---|---|---|---|---|---|
20241113 | 20241113 | TRUE | 是 | 20241113 | 周三23:00处理周三的数据 |
20241114 | 20241114 | TRUE | 是 | 20241114 | |
20241115 | 20241115 | TRUE | 是 | 20241115 | |
20241116 | 20241116 | FALSE | 跳过运行 | 跳过运行 | 周六23:00不执行 |
20241117 | 20241117 | FALSE | 跳过运行 | 跳过运行 | 周日23:00不执行 |
20241118 | 20241118 | TRUE | 是 | 20241118 | 周一23:00处理周一的数据 |
20241119 | 20241119 | TRUE | 是 | 20241119 | 周二23:00处理周二的数据 |
20241120 | 20241120 | TRUE | 是 | 20241120 |
假设:周一~周五为交易日,周六/周日不是交易日。
首先是调度日历的设计,周六凌晨(业务日期=周五)不跑,周一凌晨(业务日期=周日)需要跑。
基于 ${calendar_day} 取值,关键周期是周一凌晨对应的业务日期是周日,其周一执行时,实际需要取到周五交易的业务日期,但其他日期不需要处理,可通过如下方式解决:
# 调度日历减1个调度日(-1),再加一个自然日(+1d)。 # 业务日期=2024年11月13日(周三)时,此参数取值 = 20241113 # 业务日期=2024年11月17日(周日)时,此参数取值 = 20241115 print("${calendar_day-1+1d}")
date(实例计划时间) | schedule_date(业务日期) | schedule(调度日历配置) | 实例是否运行 | 变量实际取值 | 备注 |
|---|---|---|---|---|---|
20241113 | 20241112 | TRUE | 是 | 20241112 | 周三00:10处理周二的数据 |
20241114 | 20241113 | TRUE | 是 | 20241113 | |
20241115 | 20241114 | TRUE | 是 | 20241114 | |
20241116 | 20241115 | FALSE | 跳过运行 | 跳过运行 | 周六00:10不执行 |
20241117 | 20241116 | FALSE | 跳过运行 | 跳过运行 | 周日00:10不执行 |
20241118 | 20241117 | TRUE | 是 | 20241215 | 周一00:10执行,处理周五的数据 |
20241119 | 20241118 | TRUE | 是 | 20241118 | 周二00:10凌晨处理周一的数据 |
20241120 | 20241119 | TRUE | 是 | 20241119 |
维度 | 场景1 | 场景2 | 场景3 |
|---|---|---|---|
场景说明 | 交易日第2天凌晨,处理上个交易日的数据 | 交易日处理当天的数据,非交易日不跑 | 下个交易日处理上个交易日的数据,非交易日不跑 |
任务配置 | 凌晨00:10运行 | 当天23:00运行 | 凌晨00:10运行 |
日历配置 | 业务日期=周六、周日,配成False | 业务日期=周五、周六,配成False | 同场景2 |
参数使用 |
|
|
|
业务日期及参数取值 | |||
2024年11月12日(周二) | TRUE,20241112 | TRUE,20241113 | TRUE,20241112 |
2024年11月13日(周三) | TRUE,20241113 | TRUE,20241114 | TRUE,20241113 |
2024年11月14日(周四) | TRUE,20241114 | TRUE,20241115 | TRUE,20241114 |
2024年11月15日(周五) | TRUE,20241115 | FALSE,不运行 | FALSE,不运行 |
2024年11月16日(周六) | FALSE,不运行 | FALSE,不运行 | FALSE,不运行 |
2024年11月17日(周日) | FALSE,不运行 | TRUE,20241118 | TRUE,20241115 |
2024年11月18日(周一) | TRUE,20241118 | TRUE,20241119 | TRUE,20241118 |
2024年11月19日(周二) | TRUE,20241119 | TRUE,20241120 | TRUE,20241119 |