调度参数支持的格式

调度参数是DataWorks的核心功能,用于在任务自动调度时动态替换代码中的时间参数。它解决了在周期性任务中硬编码日期的维护难题,使业务流程能自动适配不同的业务日期和执行时间。本文为您介绍调度参数的参数值支持的格式及相关使用。

重要

阅读此文档前,请先阅读并理解调度参数的配置方式,参见: 配置并使用调度参数

核心概念:时间基准

DataWorks的所有动态时间参数都基于以下两种核心的时间基准。

概念

定义

参数值

自定义格式

时间精度

业务日期

通常指任务定时运行日期的前一天。在T+1的离线计算场景中,它代表需要处理的业务数据的发生日期。例如,今天统计前一天的营业额,此处的前一天,指交易发生的日期,也就是业务日期。

${yyyymmdd}

${...}

年月日

定时时间

指任务在调度配置中设置调度时间,在任务运行时会被系统替换为任务实例运行的当天。它精确到秒,并独立于任务的实际运行时间。

引用该时间为任务预期执行时间,与实际开始执行时间并非完全一致。任务实际开始执行时间受多方因素影响。

$[yyyymmddhh24miss]

$[...]

年月日时分秒

概念总结:

  • 业务日期 ≈ 昨天 (数据的日期)

  • 定时时间 ≈ 今天 (任务运行的时间)

一个典型的T+1任务就是:在今天(定时时间)的凌晨,启动一个任务,去处理昨天(业务日期)的数据。

基本使用原则

您可以在调度配置 > 调度参数中设置参数并赋值,并通过调度参数预览查看未来n个运行实例中,调度参数的替换值。更详细的参数配置流程见:配置并使用调度参数

  • 业务日期和定时时间可以通过系统内置参数$bizdate$cyctime直接填入参数值,在取值上$bizdate等同${yyyymmdd}$cyctime等同$[yyyymmddhh24miss]

    image

    image

    以上为$bizdate${yyyymmdd}$cyctime$[yyyymmddhh24miss]的参数定义和业务日期为2025-10-16时的预览结果。
  • 若基准时间的参数返回值不满足要求,也可以通过${...}$[...]进行自定义时间参数,自定义时间参数是在两种基准时间的基础上进行变换,支持以下几种方式:

重要

通过自定义方式对调度参数进行赋值时,需注意区分两种括号的格式{...}和[...],两种模式的基准值不同,返回的参数值也截然不同,避免造成生产数据错误。

赋值类型

调度参数支持多种赋值类型,包括:

  • 系统内置参数:如$bizdate$bizmonth、$jobid,可用于获取业务日期、业务月份、业务流程ID等,不局限于时间类型。详见:系统内置参数

  • 自定义时间参数:如${...}$[...],可在两种时间基准值的基础上进行变换,详见:自定义时间参数

  • 常量:如'123''abc'等。

自定义时间参数

DataWorks支持通过${...}$[...]来获取业务时间和定时时间,并支持通过以下几种类型,对时间进行灵活变换,以符合业务需要。以节点配置的调度时间为天调度,调度时间02:30:45为例。假设业务日期为20251031,以下是基准时间:

  • 业务日期${yyyymmdd},以20251031为例。

  • 定时时间$[yyyymmddhh24miss],以20251101023045为例。

    重要

    定时时间为预设的调度时间,在任务实例化时已固定。如任务实例因资源受限或上游节点状态等原因延迟运行,定时时间不会随着实例实际运行时间而改变。

${...}$[...] 核心区别

首先了解两者的核心区别。${...}$[...] 两种格式在时间基准和计算能力上存在本质区别,混用这两种格式可能导致数据错误。

对比维度

${...} (基于业务日期)

$[...] (基于定时时间)

时间基准

业务日期(T-1)

定时时间(T)

时间精度

(年月日)

(年月日时分秒)

偏移计算能力

支持对 年、月、周、天 进行偏移计算。

支持对 天、小时、分钟 进行偏移计算。

核心限制

不支持时、分、秒等更小时间单位的格式化与偏移计算。

不支持通过 $[yyyy±N]$[mm±N] 的语法直接对年、月进行偏移,需借助 add_months 函数。

默认等价

${yyyymmdd} 等价于 $bizdate

$[yyyymmddhh24miss] 等价于 $cyctime

时间格式化

使用大括号${...}$[...],结合yyyyyymmdd自定义组合生成时间参数,获取业务日期前后多少年、月、天。

代码

描述

${...}(基于业务日期)

$[...] (基于定时时间)

赋值方式

结果

赋值方式

结果

yyyy

4位年份

${yyyy}

2025

$[yyyy]

2025

mm

2位月份

${mm}

10

$[mm]

11

dd

2位日期

${dd}

31

$[dd]

01

hh24

24小时制小时

不支持(精度为天)

-

$[hh24]

02

hh / hh12

12小时制小时

-

$[hh]

02

mi

分钟

-

$[mi]

30

ss

-

$[ss]

45

yyyymm

取年月

${yyyymm}

202510

$[yyyymm]

202511

yyyy-mm-dd

格式化为用“-”拼接

${yyyy-mm-dd}

2025-10-31

$[yyyy-mm-dd]

2025-11-01

yyyy-mm-dd hh24:mi:ss

格式化为用“-”拼接,并带时分秒

不支持(精度为天)

-

支持方式见字符串拼接:方案2

偏移计算

偏移计算是动态参数的核心,可基于业务日期定时时间进行前后加减。如在时间基准的基础上实现获取前后N年、月、日,或N小时、分钟(小时分钟仅支持定时时间)的时间计算。${...}$[...]由于时间基准的精度不同,可支持的范围也不一样。

  1. ${...} 模式的偏移计算

    • 核心能力:支持对年、月、周、天进行整数偏移。

      重要

      不支持时、分的偏移计算。即不支持${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}

  2. $[...] 模式的偏移计算

    • 核心能力:支持对天、小时、分钟进行分数偏移。

      重要

      $[...]无法根据$[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]

      说明

      执行小时分钟的偏移计算时,可能存在跨天问题。跨天时间的参数处理方式,详情请参见调度参数往前取一个小时,如何处理跨天参数替换的问题

通过引擎函数二次变换

当调度参数的内置格式化和偏移无法直接生成最终需要的值时(如获取上月的最后一天),可通过使用目标节点的计算引擎内置的函数或通过赋值节点在调用参数时,对时间参数进行二次变换。

参考:调度参数返回值二次处理的典型场景

字符串拼接

此方法用于构建内置语法不支持的、但有规律的日期字符串。它将调度参数生成的日期部分与固定的常量字符串进行组合。

案例1:动态获取每月的第一天。

  • 场景:无论任务在哪天运行,都需要一个代表当月第一天的字符串,格式为 yyyymm01

  • 实现:

    1. 提取年月部分:使用 ${yyyymm} 获取当前业务日期的年月部分(例如,如果业务日期是 20231027,则结果为 202310)。

    2. 拼接常量:将提取出的年月与字符串 '01' 进行拼接。

    3. 参数调用: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

  • 实现:

    1. 设置两个参数:分别为datatime1datatime2,并且分别赋值为datetime1=$[yyyy-mm-dd]datetime2=$[hh24:mi:ss-1/24/60]

    2. 拼接参数:将datatime1datatime2通过空格拼接。

    3. 参数调用:pt=${datetime1} ${datetime2}

  • 结果:当任务运行时,${datetime1} ${datetime2}将被替换为:2023-11-01 02:30:45

系统内置参数

DataWorks支持下表的系统参数,可用于设置调度参数的取值。但该方式灵活性差,时间格式固定,建议优先使用支持灵活变换的自定义时间参数。

内置参数

定义

$bizdate

业务日期,格式为yyyymmdd,与自定义参数${yyyymmdd}取值一致。

该参数的应用较为广泛,日常调度中默认任务预期运行时间的前一天为业务日期。

$cyctime

任务的定时时间,格式为yyyymmddhh24miss,与自定义参数$[yyyymmddhh24miss]取值一致。

$gmtdate

当前日期,格式为yyyymmdd

该参数默认取当天日期,执行补数据操作时输入的日期为业务日期+1

$bizmonth

业务月份,格式为yyyymm

  • 如果业务日期的月份与当前月份一致,则$bizmonth=业务日期月份-1

  • 如果业务日期的月份与当前月份不一致,则$bizmonth=业务日期月份

$jobid

任务所属的业务流程ID。

$nodeid

节点ID。

$taskid

节点产生的实例ID。

附录

补数据时的参数替换

任务提交至运维中心后,可以通过执行补数据操作批量生成并执行指定日期范围内的历史任务实例,以完成数据的修复、回补或回溯分析。

  • 业务日期($bizdate):补数据时选择的业务日期和$bizdate的替换结果保持一致。若调度参数使用${...}自定义格式,其基准时间即为选中的日期,随后根据指定的时间表达式进行变换。

  • 定时时间($cyctime):执行补数据时,$cyctime替换结果为选择的业务日期+1天。

    例如,补数据选择的业务日期为20250315,则执行补数据时,$cyctime参数的替换结果为20250315001000。若调度参数使用$[...]格式,其基准时间为选中的业务日期+1,随后根据指定的时间表达式进行变换。

调度参数与业务日期、定时时间、实际运行时间的关系

关系类别

说明及示例

调度参数与实际运行时间的关系。

调度参数替换值在实例生成时已确定,因此,调度参数的替换值不会随着实例实际运行时间的改变而发生变化。

调度参数与任务定时时间的关系。

当调度参数设置为$[]时,参数的替换值由实例的定时时间决定,即由节点调度配置的调度时间决定。

image

例如,当前节点为小时调度节点,并且设置定时调度时间为00:00~23:59,每小时调度一次,则:

  • 第一个小时实例定时时间为0点,小时的参数取值为00

  • 第二个小时实例定时时间为1点,小时的参数取值为01

调度参数与业务日期、定时时间的关系。

image

关于夏令时说明

DataWorks可保障在进入和退出夏令时当天,任务能够正确运行。进入与退出夏令时切换产品侧的解决方案详情,请参见相关文档场景:夏令时切换对调度任务运行的影响。为避免夏令时切换对您任务执行造成额外理解成本,建议实施夏令时的地域优先查看此文档。

相关文档