You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件(私有化)

大数据研发治理套件(私有化)

复制全文
调度日历
调度日历典型场景
复制全文
调度日历典型场景

以下几种场景,以2024年11月12日~2024年11月19日执行时间为例。

场景1:当天处理昨天的交易数据

假设:周一~周五为交易日,周六/周日不是交易日。

  • 周二凌晨处理周一的数据(注意这里周二是指任务的实际运行时间)
  • 周三凌晨处理周二的数据
  • ……
  • 周六凌晨处理周五的数据
  • 周日凌晨不跑
  • 周一凌晨不跑

针对本场景,假设为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

场景2:当天处理当天的交易数据

场景2.1:天级任务,当天处理当天的交易数据

假设:周一~周五为交易日,周六/周日不是交易日。

  • 周一晚上23:00处理周一全天的数据(注意这里说的是任务的实际运行时间)
  • 周二晚上23:00处理周二全天的数据
  • ……
  • 周五晚上23:00处理周五全天的数据
  • 周六晚上23:00不跑
  • 周日晚上23:00不跑

区别于第一个场景,本场景需要处理当日的数据,因此需要将任务的计划时间设置为每日的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.2 与场景 2.1 相同,都是当天晚上23:00处理当天的数据。
但场景 2.2 采用另一种方式,即通过「小时调度任务的业务日期=计划时间」来解决业务日期与计划时间匹配的问题。
由于 ${calendar_day} 的取值逻辑为业务日期,而这时候希望 ${calendar_day} 的取值逻辑与实际的计划时间相同,例如计划时间是2024-11-15 23:00,而希望业务日期的日历也这样维护,此时可采用一种间接方式处理。

Step1:将任务设置为小时调度,并设置每天仅在23:00的时间调度一次。
Image

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

场景3:第2个交易日,处理前一个交易日的数据

假设:周一~周五为交易日,周六/周日不是交易日。

  • 周二凌晨处理周一的数据(注意这里说的是任务的实际运行时间)
  • 周三凌晨处理周二的数据
  • ……
  • 周六凌晨不跑
  • 周日凌晨不跑
  • 周一凌晨处理上周五的数据

首先是调度日历的设计,周六凌晨(业务日期=周五)不跑,周一凌晨(业务日期=周日)需要跑。
基于 ${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
其他配置成True

业务日期=周五、周六,配成False
其他配置成True

同场景2

参数使用

${calendar_day}

${calendar_day+1}

${calendar_day-1+1d}

业务日期及参数取值

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

最近更新时间:2025.01.03 17:58:25
这个页面对您有帮助吗?
有用
有用
无用
无用