自定义参数取值差异对比

在数据处理任务中,常需要根据任务运行的时间动态生成分区或文件名。使用系统提供的参数(如基于业务日期的 ${...} 和基于定时时间的 $[...])可以实现动态时间值的注入。下文对比不同参数格式在精度、偏移计算能力和使用场景上的核心差异

重要

了解基准时间的定义和自定义参数的变换方式,请参见调度参数支持的格式

不同格式自定义参数的应用对比

以当前时间 20251101、任务每日定时运行时间 00:00 为例,不同格式自定义参数的赋值情况如下:

说明

假设代码引用方式均为pt=${datetime}

参数格式

描述

调度参数赋值

参数替换结果

${yyyymmdd}

获取业务时间。

datetime=${yyyymmdd}

datetime=20251031

$[yyyymmddhh24miss]

获取定时时间,精确到秒。

datetime=$[yyyymmddhh24miss]

datetime=20251101000000

$bizdate

获取业务时间。

datetime=$bizdate

datetime=20251031

$cyctime

获取定时时间,精确到秒。

datetime=$cyctime

datetime=20251101000000

$gmtdate

获取当前时间,精确到天。

datetime=$gmtdate

datetime=20251101

$bizmonth

获取业务月份。取值逻辑如下:

  • 如果业务时间与当前时间在同一个月,则取上一个月的月份。

  • 否则,取业务时间所在的月份。

datetime=$bizmonth

例如,当前时间为20251101

  • 如果业务时间为20251102(与当前时间同月),则datetime=202510

  • 如果业务时间为20251031(与当前时间不同月),则datetime=202510

${…}和$[…]参数的核心差异

${…} 和 $[…] 参数的核心差异对比如下:

对比维度

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

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

时间基准

业务日期(T-1)

定时时间(T)

时间精度

(年月日)

(年月日时分秒)

偏移计算能力

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

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

核心限制

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

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

默认等价

${yyyymmdd} 等价于 $bizdate

$[yyyymmddhh24miss] 等价于 $cyctime

本文以ODPS SQL节点为例,假设任务的调度时间为20250720103000,展示${…}$[…]参数的时间取值配置,具体如下表。

时间取值

${…}参数

$[…]参数

取年份:2025

  • 调度参数赋值:datetime=${yyyy}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2025

  • 调度参数赋值:datetime=$[yyyy]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2025

取年份:25

  • 调度参数赋值:datetime=${yy}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=25

  • 调度参数赋值:datetime=$[yy]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=25

取年份:2024

  • 调度参数赋值:datetime=${yyyy-1}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2024

  • 调度参数赋值:datetime=$[add_months(yyyymmdd,-12)]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2024

取月份:07

  • 调度参数赋值:datetime=${mm}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=07

  • 调度参数赋值:datetime=$[mm]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=07

取日期(天):20

  • 调度参数赋值:datetime=${dd}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=20

  • 调度参数赋值:datetime=$[dd]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=20

取日期:20250620

  • 调度参数赋值:datetime=${yyyy-mm-dd-29}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2025-06-20

重要

此方式需考虑月份天数,不推荐使用,建议通过$[]方式获取上月的同一日期。

  • 调度参数赋值:datetime=$[add_months(yyyymmdd,-1)]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2025-06-20

取日期:20250719

  • 调度参数赋值:datetime=${yyyy-mm-dd}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2025-07-19

  • 调度参数赋值:datetime=$[yyyy-mm-dd-1]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2025-07-19

取日期:20240720

  • 调度参数赋值:datetime=${yyyy-mm-dd-364}

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2024-07-20

重要

此方法需考虑闰年,不推荐使用,建议通过$[]方式获取上一年的同一日期。

  • 调度参数赋值:datetime=$[add_months(yyyymmdd,-12)]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=2024-07-20

取时间:10:30:00

不支持

  • 调度参数赋值:datetime=$[hh24:mi:ss]

  • 代码引用:pt=${datetime}

  • 参数替换结果:pt=10:30:00

取时间:2025-07-20 10:30:00

不支持

  • 调度参数赋值:datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss]

    说明

    您需要自定义两个参数datetime1datetime2,两个参数间使用一个空格分隔。

  • 代码引用:pt=${datetime1} ${datetime2}

  • 参数替换结果:

    • datetime1=$[yyyy-mm-dd]=2025-07-20

    • datetime2=$[hh24:mi:ss]=10:30:00

    • pt=2025-07-20 10:30:00

取时间:2025-07-20 10:29:00

不支持

  • 调度参数赋值:datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss-1/24/60]

    说明

    您需要自定义两个参数datetime1datetime2,两个参数间使用一个空格分隔。

  • 代码引用:pt=${datetime1} ${datetime2}

  • 参数替换结果:

    • datetime1=$[yyyy-mm-dd]=2025-07-20

    • datetime2=$[hh24:mi:ss-1/24/60]=10:29:00

    • pt=2025-07-20 10:29:00

取时间:2025-07-20 09:30:00

不支持

  • 调度参数赋值:datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss-1/24]

    说明

    您需要自定义两个参数datetime1datetime2,两个参数间使用一个空格分隔。

  • 代码引用:pt=${datetime1} ${datetime2}

  • 参数替换结果:

    • datetime1=$[yyyy-mm-dd]=2025-07-20

    • datetime2=$[hh24:mi:ss-1/24]=09:30:00

    • pt=2025-07-20 09:30:00

取前一天时间,精确到秒,且年月日与时分秒之间无空格:

2025071910:30:00

不支持

  • 调度参数赋值:datetime=$[yyyymmddhh24miss-1]

  • 代码引用:pt=${datetime}

  • 参数替换结果:

    • datetime=$[yyyymmddhh24miss-1]=2025071910:30:00

    • pt=2025071910:30:00

取前一天时间,精确到秒,且年月日与时分秒之间有空格:

20250719 10:30:00

不支持

重要

调度参数赋值表达式中不支持空格,您可以使用两个调度参数,然后在代码引用时使用空格进行拼接。

  • 调度参数赋值:datetime1=$[yyyymmdd-1] datetime2=$[hh24:mi:ss]

    说明

    您需要自定义两个参数datetime1datetime2,两个参数间使用一个空格分隔。

  • 代码引用:pt=${datetime1} ${datetime2}

  • 参数替换结果:

    • datetime1=$[yyyymmdd-1]=20250719

    • datetime2=$[hh24:mi:ss]=10:30:00

    • pt=20250719 10:30:00