调度参数是DataWorks的核心功能,用于在任务自动调度时动态替换代码中的时间参数。它解决了在周期性任务中硬编码日期的维护难题,使业务流程能自动适配不同的业务日期和执行时间。本文为您介绍调度参数的参数值支持的格式及相关使用。
阅读此文档前,请先阅读并理解调度参数的配置方式,参见: 配置并使用调度参数。
核心概念:时间基准
时间参数是调度参数的主要应用场景,可用于在任务运行时动态替换各种时间字符串。DataWorks的所有动态时间参数都基于以下两种核心的时间基准。
概念 | 定义 | 默认参数值 | 自定义格式 | 时间精度 |
业务日期 | 指任务定时运行日期的前一天。在T+1的离线计算场景中,它代表需要处理的业务数据的发生日期。 例如,今天统计前一天的营业额,此处的前一天,指交易发生的日期,也就是业务日期。 |
|
| 年月日 |
定时时间 | 指任务在调度配置中设定的调度时间。在任务运行时会被系统替换为任务实例运行的当天,是任务的理论运行时刻,不随实际运行时的资源排队或延迟而偏移。 |
|
| 年月日时分秒 |
概念等价总结:
业务日期 ≈ 昨天 (数据的日期)
定时时间 ≈ 今天 (任务运行的时间)
一个典型的T+1任务就是:在今天(定时时间)的凌晨,启动一个任务,去处理昨天(业务日期)的数据。
参数值表达式
调度参数支持多种赋值类型,包括:
自定义时间参数:如
${...}和$[...],可在两种时间基准值(业务日期和定时时间)的基础上进行变换,详见:自定义时间参数。系统内置参数:如
$bizdate、$bizmonth、$jobid,可用于获取业务日期、业务月份、业务流程ID等,不局限于时间类型。详见:系统内置参数。常量:如
'123','abc'等。
特殊字符限制:参数表达式不支持填写空格和=。
基本使用原则
调度参数通过在中定义参数名和参数值来确定赋值逻辑,定义完成后即可在代码中,通过${参数名}的方式来引用。更详细的参数配置流程见:配置并使用调度参数。
业务日期和定时时间可以通过系统内置参数
$bizdate和$cyctime直接填入参数值,在取值上:$bizdate=${yyyymmdd}$cyctime=$[yyyymmddhh24miss]

以上为$bizdate与${yyyymmdd}、$cyctime与$[yyyymmddhh24miss]的参数定义和业务日期为2025-10-16时的预览结果。
若基准时间的参数值不满足要求,也可以通过
${...}和$[...]进行自定义时间参数,自定义时间参数可在两种基准时间的基础上进行变换。
自定义时间参数
DataWorks支持通过${...}和$[...]来获取业务时间和定时时间,并支持通过以下几种类型,对时间进行灵活变换,以符合业务需要。以节点配置的调度时间为天调度,调度时间02:30:45为例。假设业务日期为20251031,以下是基准时间:
业务日期:${yyyymmdd}的取值为20251031。
定时时间:$[yyyymmddhh24miss]的取值为20251101023045。
${...} 与 $[...] 的核心区别
${...} 和 $[...] 两种格式在时间基准和计算能力上存在本质区别,混用这两种格式将导致数据错误。
对比维度 |
|
|
时间基准 | 业务日期(T-1) | 定时时间(T) |
时间精度 | 天 (年月日) | 秒 (年月日时分秒) |
偏移计算能力 | 支持对 年、月、周、天 进行偏移计算。 | 支持对 天、小时、分钟 进行偏移计算。 |
核心限制 | 不支持时、分、秒等更小时间单位的格式化与偏移计算。 | 不支持通过 |
等价系统参数 |
|
|
时间格式化
使用大括号${...}或$[...],结合yyyy、yy、mm及dd自定义组合生成时间参数,获取业务日期前后多少年、月、天。
代码 | 描述 |
|
| ||
赋值方式 | 结果 | 赋值方式 | 结果 | ||
| 4位年份 |
|
|
|
|
| 2位月份 |
|
|
|
|
| 2位日期 |
|
|
|
|
| 24小时制小时 | 不支持(精度为天) | - |
|
|
| 12小时制小时 | - |
|
| |
| 分钟 | - |
|
| |
| 秒 | - |
|
| |
| 取年月 |
|
|
|
|
| 格式化为用“-”拼接 |
|
|
|
|
| 格式化为用“-”拼接,并带时分秒 | 不支持(精度为天) | - | 支持方式见字符串拼接:方案2。 | |
偏移计算
偏移计算是动态参数的核心,可基于业务日期或定时时间进行前后加减。如在时间基准的基础上实现获取前后N年、月、日,或N小时、分钟(小时分钟仅支持定时时间)的时间计算。${...}和$[...]由于时间基准的精度不同,可支持的范围也不一样。
${...}模式的偏移计算核心能力:支持对年、月、周、天进行整数偏移。
重要不支持时、分的偏移计算。即不支持${yyyy-mm-dd-1/24}等用法。
语法:
${<时间格式><±N>},N对应时间格式的最小单位。如格式为yyyymm,则N的单位对应mm(月);如格式为yyyymmdd,则格式对应dd(天)。日期加减周期
偏移单位
获取方式
举例
前/后N年
年
${yyyy±N}或${yy±N}取上一年:
${yyyy-1}前/后N月
月
${yyyymm±N}取上个月:
${yyyymm-1}前/后N周
周
${yyyymmdd±7*N}取上周:
${yyyymmdd-7*1}前/后N天
天
${yyyymmdd±N}取前天:
${yyyymmdd-1}
$[...]模式的偏移计算核心能力:支持对天、小时、分钟进行分数偏移。
重要$[...]无法根据$[yyyy-N]、$[mm-N]时间格式获取多少年前、多少月前的时间数据。如需对年月进行偏移计算,需用add_months函数来支持年月偏移。语法:
$[<时间格式><±N>],其中小时偏移使用N/24 ,分钟偏移使用N/24/60,N为需要偏移的小时或分钟数。需求
偏移单位
获取方式
举例
前/后 N 年
年
$[add_months(yyyymmdd,12*N)](后N年)$[add_months(yyyymmdd,-12*N)](前N年)取上一年:
$[add_months(yyyymmdd,-12)]前/后 N 月
月
$[add_months(yyyymmdd,N)](后N月)$[add_months(yyyymmdd,-N)](前N月)取上个月:
$[add_months(yyyymmdd,-1)]前/后 N 周
周
$[yyyymmdd±7*N]取上周:
$[yyyymmdd±7*1]前/后 N 天
天
$[yyyymmdd±N]取昨天:
$[yyyymmdd-1]前/后 N 小时
小时
可用格式:
$[hh24miss±N/24]、$[hh24±N/24]$[自定义时间格式±N/24]。
不同时间格式的取前一个小时:
取月:
$[mm-1/24]。取年:
$[yyyy-1/24]。取年月:
$[yyyymm-1/24]。取年月日:
$[yyyymmdd-1/24]。取前一天且前一小时:
$[yyyymmdd-1-1/24]
前/后 N 分钟
分钟
可用格式:
$[hh24miss±N/24/60]$[yyyymmddhh24miss±N/24/60]$[mi±N/24/60]$[自定义时间格式±N/24/60]
不同时间格式的取定时时间的前15分钟:
$[yyyy-15/24/60]$[yyyymm-15/24/60]$[yyyymmdd-15/24/60]$[hh24-15/24/60]$[mi-15/24/60]
复杂组合偏移
天+小时
$[yyyymmdd±N±M/24],N为天偏移量,M为小时偏移量。示例:获取前一天的前一小时 →
$[yyyymmdd-1-1/24]说明执行小时分钟的偏移计算时,可能存在跨天问题。跨天时间的参数处理方式,详情请参见调度参数往前取一个小时,如何处理跨天参数替换的问题。
对月末日期执行月偏移计算时,若目标月份没有对应日期,结果将自动校准为该月的最后一天。例如:当前为2025-03-31,执行减1月偏移操作,由于2月没有31号,取值为2025-02-28。
通过引擎函数二次变换
当调度参数的内置格式化和偏移无法直接生成最终需要的值时(如获取上月的最后一天),可通过使用目标节点的计算引擎内置的函数或通过赋值节点在调用参数时,对时间参数进行二次变换。
参考:调度参数返回值二次处理的典型场景。
字符串拼接
此方法用于构建内置语法不支持的、但有规律的日期字符串。它将调度参数生成的日期部分与固定的常量字符串进行组合。
案例1:动态获取每月的第一天。
场景:无论任务在哪天运行,都需要一个代表当月第一天的字符串,格式为
yyyymm01。实现:
提取年月部分:使用
${yyyymm}获取当前业务日期的年月部分(例如,如果业务日期是20231027,则结果为202310)。拼接常量:将提取出的年月与字符串
'01'进行拼接。参数调用:
first_day_of_month=${yyyymm}01
结果:当任务运行时,
${first_day_of_month}将被替换为20231001。
案例2:获取yyyy-mm-dd hh24:mi:ss格式的时间。
场景:获取一个
yyyy-mm-dd hh24:mi:ss格式的时间,如:2023-11-01 02:30:45。实现:
设置两个参数:分别为
datetime1和datetime2,并且分别赋值为datetime1=$[yyyy-mm-dd],datetime2=$[hh24:mi:ss-1/24/60]。拼接参数:将
datetime1和datetime2通过空格拼接。参数调用:pt=
${datetime1}${datetime2}。
结果:当任务运行时,
${datetime1}${datetime2}将被替换为:2023-11-01 02:30:45。
系统内置参数
DataWorks支持以下系统参数,可用于配置调度参数的取值。但该方式灵活性差,时间格式固定,建议优先使用支持灵活变换的自定义时间参数。
内置参数 | 定义 |
$bizdate | 业务日期,格式为 该参数的应用较为广泛,日常调度中默认任务预期运行时间的前一天为业务日期。 |
$cyctime | 任务的定时时间,格式为 |
$gmtdate | 当前日期,格式为 该参数默认取当天日期,执行补数据操作时输入的日期为 |
$bizmonth | 业务月份,格式为
|
$jobid | 任务所属的业务流程ID。 |
$nodeid | 节点ID。 |
$taskid | 节点产生的实例ID。 |
实际场景下的参数替换示例
调度参数的替换值在实例生成时即被固定,与实例的实际启动时间无关。此原则适用于所有场景。
场景一:正常调度
在常规的自动调度场景下,参数的替换逻辑与其两大时间基准(业务日期和定时时间)直接对应。
${...}(业务日期):其值由实例自身的“业务日期”决定。$[...](定时时间):其值由实例自身的“定时时间”决定。
示例:假设一个天调度任务A,定时时间为每天 00:00,并配置了两个参数:
yesterday=${yyyymmdd}today=$[yyyymmddhh24miss]
对于其中一个实例的替换逻辑如下表所示:
实例的定时时间 | 实例的业务日期 | 参数:yesterday=${yyyymmdd} | 参数:today=$[yyyymmddhh24miss] |
|
|
|
|
场景二:补数据
在手动执行补数据操作时,参数的替换会根据“手动选择的业务日期”发生变化,尤其定时时间
${...}(业务日期):其基准时间为手动选择的业务日期。$[...](定时时间):其基准时间为手动选择的业务日期+1天。
示例:假设对上述同一个任务A,手动执行补数据,选择的业务日期为 2025-03-15。
手动选择的业务日期 | 参数:yesterday=${yyyymmdd} | 参数:today=$[yyyymmddhh24miss] |
|
|
|
常见问题
使用调度参数的常见问题参见:调度参数常见问题。