一、速查卡(Quick Reference)
语法速查: ${yyyyMMdd} → 实例数据时间(推荐用于分区值) $(yyyyMMdd) → 计划调度时间(推荐用于海外时区场景) $[yyyyMMdd] → 实例执行时间(适用于日志/审计)偏移速查: ${yyyyMMdd-1d} → 前 1 天 ${yyyyMMdd+3M} → 后 3 个月 ${yyyyMMdd+2w} → 后 2 周 ${yyyyMMddHHmmss-2H}→ 前 2 小时特殊偏移速查: ${yyyyMMdd+ME} → 当月月末 ${yyyyMMdd+MS} → 当月月初 ${yyyyMMdd+PME} → 上月月末 ${yyyyMMdd+YE} → 当年年末时区速查: ${UTC+0_yyyyMMdd} → UTC+0 时区 ${UTC+7_yyyyMMdd} → UTC+7 时区 不加时区前缀 → 默认 UTC+8
三、1.1 三类时间参数总览
系统支持三类内置时间参数,核心区别如下:
| 参数类型 | 语法标记 | 含义 | 稳定性 | 推荐场景 |
| 实例数据时间 | ${ } | 业务数据的基准时间,按任务粒度截断 | 周期运行 / 补录 / 重跑均不变 | 分区值、业务时间字段 |
| 计划调度时间 | $( ) | 调度配置中设定的起调时间 | 固定不变 | 海外时区场景、保留完整调度时刻 |
| 实例执行时间 | $[ ] | 实例实际开始运行的时间 | 每次执行都变 | 日志记录、审计追踪 |
注意:说明:
注意:关键区别:对于一个天任务(每天 02:00 执行),2026-03-22 正常执行时:
四、1.2 实例数据时间${}
·参数定义:处理业务数据的基准时间。同一实例的数据时间在周期运行、补录、重跑中始终相同。
·数据时间截断规则:
| 任务类型 | 计划调度时间(示例) | 实例数据时间 | 截断说明 |
| 分钟任务 | 2026-03-22 14:30:00 | 2026-03-22 14:30:00 | 保留到分钟 |
| 小时任务 | 2026-03-22 14:30:00 | 2026-03-22 14:00:00 | 截断到整小时 |
| 天任务 | 2026-03-22 02:00:00 | 2026-03-22 00:00:00 | 截断到天 |
| 周任务 | 2026-03-22 02:00:00 | 2026-03-22 00:00:00 | 截断到天 |
| 月任务 | 2026-03-22 02:00:00 | 2026-03-22 00:00:00 | 截断到天 |
| 年任务 | 2026-03-22 02:00:00 | 2026-03-22 00:00:00 | 截断到天 |
·测试运行:数据时间为提交执行的时间。
·参数格式:使用 ${} 包裹格式串,如 ${yyyyMMddHHmmss}。
五、1.3 计划调度时间$()
·参数定义:在任务调度配置中设置的调度时间,也是周期实例生成的时间。比如天任务每天 2 点执行,则计划调度时间为每天 02:00:00。
·与实例数据时间的关系:计划调度时间保留了完整的调度时刻(如 02:00:00),而实例数据时间会按任务粒度截断(天任务截断为 00:00:00)。对于分钟任务,两者相同。
·参数格式:使用 $() 包裹格式串,如 $(yyyyMMddHHmmss)。
六、1.4 实例执行时间$[]
·参数定义:实例真实执行的开始时间,是动态变化的。同一个实例在周期执行和补录/重跑时,实例执行时间一定不同。
·参数格式:使用 $[] 包裹格式串,如 $[yyyyMMddHHmmss]。
七、1.5 通用语法规则
注意:说明:
八、1.5.1 时间格式化
支持按需调整参数格式,自由组合年、月、日、时、分、秒:
| 格式串 | 描述 | 示例(数据时间为 2026-03-22 14:30:45) |
| ${yyyy} | 4 位年份 | 2026 |
| ${MM} | 2 位月份 | 03 |
| ${dd} | 2 位日期 | 22 |
| ${HH} | 2 位小时(24h) | 14 |
| ${mm} | 2 位分钟 | 30 |
| ${ss} | 2 位秒 | 45 |
| ${yyyyMMdd} | 紧凑日期 | 20260322 |
| ${yyyy-MM-dd} | 格式化日期,用 – 拼接 | 2026-03-22 |
| ${HH:mm:ss} | 格式化时间,用 : 拼接 | 14:30:45 |
| ${yyyy-MM-dd HH:mm:ss} | 完整日期时间 | 2026-03-22 14:30:45 |
| ${yyyyMMddHHmmss} | 紧凑完整时间 | 20260322143045 |
注意:说明:
九、1.5.2 时间偏移计算
支持按需进行偏移计算,语法为 ${<格式串><±N><单位>}。
| 偏移方向 | 语法 | 说明 |
| 后 N 年 | ${yyyyMMdd+Ny} | 如 ${yyyyMMdd+2y} → 后 2 年 |
| 前 N 年 | ${yyyyMMdd-Ny} | 如 ${yyyyMMdd-1y} → 前 1 年 |
| 后 N 月 | ${yyyyMMdd+NM} | 如 ${yyyyMMdd+3M} → 后 3 个月 |
| 前 N 月 | ${yyyyMMdd-NM} | 如 ${yyyyMMdd-1M} → 前 1 个月 |
| 后 N 周 | ${yyyyMMdd+Nw} | 如 ${yyyyMMdd+1w} → 后 1 周 |
| 前 N 周 | ${yyyyMMdd-Nw} | 如 ${yyyyMMdd-2w} → 前 2 周 |
| 后 N 天 | ${yyyyMMdd+Nd} | 如 ${yyyyMMdd+7d} → 后 7 天 |
| 前 N 天 | ${yyyyMMdd-Nd} | 如 ${yyyyMMdd-1d} → 前 1 天 |
| 后 N 小时 | ${yyyyMMddHHmmss+NH} | 如 ${yyyyMMddHHmmss+6H} → 后 6 小时 |
| 前 N 小时 | ${yyyyMMddHHmmss-NH} | 如 ${yyyyMMddHHmmss-2H} → 前 2 小时 |
| 后 N 分钟 | ${yyyyMMddHHmmss+Nm} | 如 ${yyyyMMddHHmmss+30m} → 后 30 分钟 |
| 前 N 分钟 | ${yyyyMMddHHmmss-Nm} | 如 ${yyyyMMddHHmmss-15m} → 前 15 分钟 |
| 时间戳(秒) | ${timestamp} | 10 位 Unix 时间戳 |
| 时间戳(毫秒) | ${timestamp_ms} | 13 位 Unix 时间戳 |
注意:偏移语法本身不要求时区前缀。${yyyyMMdd-1d} 和 ${UTC+0_yyyyMMdd-1d} 都是有效写法,区别仅在于时区,详情请参见 1.5.4 时区配置。
十、1.5.3 特殊偏移
支持计算当前时间对应的月末、季末、年末等特殊时间点:
| 偏移标识 | 全称 | 说明 | 示例(数据时间为 2026-03-22) |
| +TE | TENDAY END | 当旬旬末 | 20260331(3月下旬末) |
| +ME | MONTH END | 当月月末 | 20260331 |
| +QE | QUARTER END | 当季季末 | 20260331(Q1 末) |
| +HYE | HALF YEAR END | 当半年末 | 20260630 |
| +YE | YEAR END | 当年年末 | 20261231 |
| +TS | TENDAY START | 当旬旬初 | 20260321(3月下旬初) |
| +MS | MONTH START | 当月月初 | 20260301 |
| +HYS | HALFYEAR START | 当半年初 | 20260101 |
| +YS | YEAR START | 当年年初 | 20260101 |
| +PME | PRI MONTH END | 上月月末 | 20260228 |
| +PYE | PRI YEAR END | 上年年末 | 20251231 |
语法示例:
·${yyyyMMdd+ME} :实例数据时间对应的当月月末
·$(yyyyMMdd+PME) :计划调度时间对应的上月月末
·$[yyyyMMdd+YE] :实例执行时间对应的当年年末
十一、1.5.4 时区配置
支持对时间参数做时区转化,语法为在格式串前添加 UTC+N_ 前缀:
·${UTC+0_yyyyMMdd} → 实例数据时间的 UTC+0 时间
·$(UTC+7_yyyyMMdd) → 计划调度时间的 UTC+7 时间
·$[UTC+9_yyyyMMdd] → 实例执行时间的 UTC+9 时间
默认行为:若未添加时区前缀,默认为 UTC+8(北京时间)。
时区 + 偏移组合:可以同时使用时区和偏移,如 ${UTC+0_yyyyMMdd-1d} 表示 UTC+0 时区下前一天的日期。
十二、1.5.5 完整语法规则
参数语法: 实例数据时间: ${[UTC+N_]<format>[±N<unit>][+<special>]} 计划调度时间: $([UTC+N_]<format>[±N<unit>][+<special>]) 实例执行时间: $[[UTC+N_]<format>[±N<unit>][+<special>]]其中: [UTC+N_] 可选,时区前缀,N 为整数,默认 UTC+8 <format> yyyy, MM, dd, HH, mm, ss 及其自由组合(支持分隔符) [±N<unit>] 可选,偏移量 <unit> y(年), M(月), w(周), d(天), H(小时), m(分钟) [+<special>] 可选,特殊偏移标识 TE, ME, QE, HYE, YE, TS, MS, HYS, YS, PME, PYE
十四、推荐使用方式
·分区值 / 业务时间字段 → 使用实例数据时间 ${}
实例数据时间是基准时间,在周期执行、补录、重跑场景下值相同,保证数据始终写入正确的时间分区。
·海外 / 非 UTC+8 场景 → 使用计划调度时间 $() + 时区前缀
如海外客户以 UTC+0 定义调度时间,建议使用 $(UTC+0_yyyyMMdd)。若使用实例数据时间,在极端跨周期场景下可能存在时间错误。
·日志 / 审计 → 使用实例执行时间 $[]
当需要记录"这条数据是什么时候跑出来的"时使用。
·全局 T+1 模式 → 在项目管理-参数设置中定义全局参数
参数值设为 ${yyyyMMdd-1d}(当天的前一天),该参数在项目下所有任务中均生效。
十五、使用示例
场景 1:T+1 分区写入(最常见)
今天跑的任务,数据写入昨天的分区:
— 天任务,2026-03-22 执行,写入 dt='20260321' 分区INSERT OVERWRITE TABLE dw.user_daily PARTITION(dt='${yyyyMMdd-1d}')SELECT * FROM ods.user_logWHERE dt = '${yyyyMMdd-1d}';
场景 2:当天分区写入
业务数据写在分区表中,每天的数据写入当天对应分区:
— 天任务,2026-03-22 执行– ${yyyy-MM-dd} 解析为 '2026-03-22'SELECT ${yyyy-MM-dd} AS p_date, user_id, actionFROM ods.user_eventsWHERE dt = '${yyyyMMdd}';
场景 3:跨月汇总(月初跑上月数据)
— 每月 1 号跑任务,统计上月全月数据– ${yyyyMMdd+PME} → 上月月末, ${yyyyMMdd+MS} → 当月月初(用于定位上月范围)SELECT COUNT(*) AS order_cntFROM dw.order_detailWHERE dt >= '${yyyyMMdd+PME}' AND dt < '${yyyyMMdd+MS}';
场景 4:Shell 脚本中使用参数
#!/bin/bash# 时间参数在 Shell 中作为变量注入echo "Processing data for date: ${yyyyMMdd}"hdfs dfs -ls /data/warehouse/dt=${yyyyMMdd-1d}/
场景 5:PySpark 中使用参数
# 调度系统会在运行前将参数替换为实际值data_date = "${yyyyMMdd-1d}"df = spark.sql(f"SELECT * FROM ods.events WHERE dt = '{data_date}'")df.write.mode("overwrite").saveAsTable(f"dw.events_daily")
十七、2.1 非时间参数列表
| 参数 | 含义 | 示例值 |
| ${projectIdent} | 项目标识 | my_project |
| ${workflowName} | 工作流名称 | daily_etl |
| ${taskName} | 任务名称 | user_sync_task |
| ${taskId} | 任务 ID | task-abc123 |
| ${taskInCharge} | 责任人 | zhangsan |
| ${taskType} | 任务类型 | SparkSQL |
十八、2.2 使用示例
场景 1:在 SQL 中获取任务上下文信息
SELECT '${projectIdent}' AS project_ident, '${workflowName}' AS workflow_name, '${taskName}' AS task_name, '${taskId}' AS task_id, '${taskInCharge}' AS task_in_charge, '${taskType}' AS task_type, user_idFROM wedata_demo_db.user_infoLIMIT 10;
场景 2:指定 Yarn 任务名称
在 SparkSQL、PySpark、Spark 任务中使用 –name + 变量来指定 Yarn 上的任务名称:
–name ${projectIdent}-${workflowName}-${taskInCharge}
在 SparkSQL 连接 Kyuubi 数据源时,使用 spark.app.name 参数指定:
spark.app.name=${projectIdent}-${workflowName}-${taskInCharge}
20、补录时参数取的是哪天?
·实例数据时间 ${} 和计划调度时间 $():取的是补录的业务日期(即你指定补录的那个日期),而不是实际执行补录操作的日期。
·实例执行时间 $[]:取的是补录操作实际开始执行的时间。
21、${yyyyMMdd} 和 $(yyyyMMdd) 对于天任务有区别吗?
有区别。以每天 02:00 执行的天任务为例:
·${yyyyMMdd} → 20260322(数据时间,截断到天)
·$(yyyyMMdd) → 20260322(调度时间,日期部分相同)
日期部分相同,但如果包含时分秒:
·${yyyyMMddHHmmss} → 20260322000000(截断为 00:00:00)
·$(yyyyMMddHHmmss) → 20260322020000(保留调度时刻 02:00:00)
22、为什么我的参数没有被替换?
常见原因:
1. 括号类型用错:${} / $() / $[] 三种括号不可混用
2. 格式串拼写错误:如 ${YYYY} 应为 ${yyyy}(大小写敏感)
3. 多余空格:${ yyyyMMdd } 内部不应有空格
4. 非调度环境:参数替换仅在调度系统执行时生效,IDE 中直接运行不会替换
23、不加 UTC+N_ 时区前缀默认是什么?
默认为 UTC+8(北京时间)。
24、特殊偏移 ME 和 PME 的区别是什么?
·+ME(MONTH END):当前月的月末日期。如数据时间为 2026-03-15,则 ${yyyyMMdd+ME} → 20260331
·+PME(PRI MONTH END):上一个月的月末日期。如数据时间为 2026-03-15,则 ${yyyyMMdd+PME} → 20260228
25、偏移计算和时区前缀可以同时使用吗?
可以。语法为 ${UTC+N_<格式串><偏移>},如:
·${UTC+0_yyyyMMdd-1d} :UTC+0 时区下前一天的日期
·$(UTC+9_yyyyMMddHHmmss+6H) : UTC+9 时区下后 6 小时