任务参数
什么是任务参数
为什么需要参数?
在日常数据开发中,我们经常遇到这样的场景:
- 每天处理前一天的数据:
WHERE dt = '2023-09-21' - 每月统计上月数据:
WHERE month = '2023-08' - 查询特定城市数据:
WHERE city = 'Shanghai'
如果把日期、城市等信息写死在代码中,任务运行时就无法动态适应变化。任务参数就是为了解决这个问题而设计的。
参数的核心价值
- 动态替换:任务运行时自动替换参数值。
- 灵活配置:支持常量、时间表达式、系统参数。
- 复用性强:一次定义,多处使用。
- 易于维护:修改参数无需改动代码逻辑。
基本概念
| 分类 | 概念名称 | 含义 | 示意 |
|---|---|---|---|
| 参数定义 | 自定义参数 | 指用户在代码中,自定义输入,引用的参数。其格式固定为 ${自定义参数名} | ${my_param} |
| 参数赋值 | 常量 | 指固定不变的取值,比如字符串和数字,用于给自定义参数赋值 | abcd 或 1234 |
| 参数赋值 | 系统内置参数 | 指由系统内置的一系列参数表达式,用来方便用户获取需要通过计算获取的动态的信息,比如任务实例的计划时间 | sys_plan_datetime |
| 参数赋值 | 系统内置时间函数 | 指由系统内置的一系列函数表达式,用于对时间做一些常用的转换计算 | add_months(yyyy-MM-dd HH:mm:ss,N) |
快速开始
三步快速上手
第1步:在代码中使用参数
第2步:配置参数取值
点击"参数"按钮,系统会自动识别出 city 和 yesterday 两个参数,为它们赋值:
city=Shanghaiyesterday=$[yyyy-MM-dd, -1d]
第3步:运行验证 点击“运行”,系统会将参数替换后执行:
关键要点
- 参数格式固定为:
${参数名}。 - 参数名只能包含字母、数字、下划线。
- 参数要在定义中使用内置参数或时间表达式等赋值,然后在代码中引用。不能在代码中直接引用内置参数。
- 参数替换时,只替换
${}内的内容。 - 如需在SQL中加引号,需自行添加,比如:
'${city}'。
参数类型与作用域
系统提供两种参数类型,支持不同的使用场景:
任务参数
特点:
- 作用范围:仅当前任务
- 使用场景:任务特定的配置
适用情况:
- 单个任务独有的参数
- 需要精细控制的场景
- 临时性的参数配置
创建方式: 方式一:在脚本中输入 ${自定义参数} 后,系统会自动将自定义参数添加至「参数」弹窗内。 方式二:点击「参数」按钮,在弹窗内输入信息。

| 配置项 | 说明 | 示例 |
|---|---|---|
| 参数名称 | 参数的唯一标识 | city、yesterday |
| 取值来源 | 选择"任务"或"任务组" | 任务 |
| 参数取值 | 参数的实际值 | Shanghai、$[yyyy-MM-dd, -1d] |
| 加密取值 | 勾选后取值以密文显示 | 用于密码等敏感信息 |
| 是否忽略 | 勾选后不进行参数替换 | 将 ${var} 作为普通文本 |
示例:
任务组参数
特点:
- 作用范围:任务组内所有任务
- 使用场景:多任务共享的配置
适用情况:
- 多个任务共用的参数(如项目代码、环境标识)
- 全局性的配置(如数据库名称)
- 需要统一管理的参数
创建方式: 在任务组页面点击「参数」,在弹框中点击「新建」,填写参数名称、参数值。

如果要在具体任务中使用任务组参数,需要在任务参数定义的取值来源中做显式切换,指明该参数取值来源于任务组。

示例:
参数两种配置方法
方法一:基于代码自动识别
直接在脚本中输入 ${参数名},系统会自动识别并添加到参数列表。
优点:快速、直观,参数名不易拼写错误。
方法二:手动创建后再使用
点击"参数"按钮,在弹窗中点击"新建",手动输入参数信息。
优点:可以提前定义参数,适合规划性强的场景。
参数在不同运行方式下的作用效果
临时运行(点击"运行"按钮)
-
弹窗提示输入参数值

-
本次运行生效,不影响已保存的参数配置
-
适合调试和验证
周期调度运行(自动定时调度)
- 使用已保存的参数配置
- 根据调度时间动态计算参数值
- 适合生产环境
系统内置参数
系统预置了一系列常用参数,可直接用于参数赋值,无需手动计算。
请特别注意内置参数无法在代码中被直接引用。
日期时间类参数
| 参数名 | 格式 | 说明 | 示例(基准时间2023-09-22 18:00:00) |
|---|---|---|---|
| bizdate | yyyyMMdd | 业务日期(计划时间-1天) | 20230921 |
| sys_biz_day | yyyy-MM-dd | 业务日期 | 2023-09-21 |
| sys_biz_datetime | yyyy-MM-dd HH:mm:ss | 业务时间 | 2023-09-21 18:00:00 |
| sys_plan_day | yyyy-MM-dd | 计划日期 | 2023-09-22 |
| sys_plan_datetime | yyyy-MM-dd HH:mm:ss | 计划时间 | 2023-09-22 18:00:00 |
| sys_plan_timestamp | 13位时间戳 | 计划时间戳(毫秒) | 1695463200000 |
任务信息类参数
| 参数名 | 说明 | 示例 | 注意事项 |
|---|---|---|---|
| sys_task_id | 任务ID | 1002 | 仅调度运行时支持 |
| sys_task_name | 任务名称 | demo_task | 仅调度运行时支持 |
| sys_task_owner | 任务负责人 | UAT_TEST | 仅调度运行时支持 |
使用示例
使用建议
- 业务日期场景:优先使用
bizdate或sys_biz_day - 需要时分秒:使用
sys_biz_datetime或sys_plan_datetime - 时间戳计算:使用
sys_plan_timestamp - 审计日志:使用
sys_task_*系列参数记录任务信息
时间表达式详解
时间表达式是参数系统的核心功能,支持灵活的时间格式化和偏移计算。
基础语法
时间格式元素
时间表达式遵循 ISO-8601 标准,严格区分大小写。
| 元素 | 含义 | 示例 |
|---|---|---|
| yyyy | 四位年份 | 2023 |
| yy | 两位年份 | 23 |
| MM | 两位月份(01-12) | 9 |
| dd | 两位日期(01-31) | 22 |
| HH | 24小时制小时(00-23) | 18 |
| mm | 分钟(00-59) | 59 |
| ss | 秒(00-59) | 49 |
| .SSS | 毫秒 | 0.377 |
| ZZ | 时区 | +08:00 |
常用格式组合
常见错误
时间偏移量
支持对时间进行增减操作,使用直观的单位缩写。
| 单位 | 缩写 | 全称 | 示例 |
|---|---|---|---|
| 毫秒 | ms | milli/millisecond | 400ms |
| 秒 | s | sec/second | 400s |
| 分钟 | m | min/minute | 3m |
| 小时 | h | hour | 1h |
| 天 | d | day | 2d |
| 月 | mon | month | 1mon |
| 年 | y | year | -1y |
偏移量示例
完整示例
假设当前计划时间为:2023-09-22 18:30:00
内置时间函数
除了时间表达式,系统还提供了丰富的时间函数,用于处理更复杂的时间计算场景。
月份相关函数
first_day_of_month() - 当月第一天
语法:
示例:
last_day_of_month() - 当月最后一天
语法:
示例:
周相关函数
系统中周一为每周第一天,周日为最后一天。
first_day_of_week() - 当周第一天(周一)
语法:
示例:
last_day_of_week() - 当周最后一天(周日)
语法:
示例:
day_of_week() - 返回是周几
语法:
返回值:整数 1-7(1=周一,7=周日)
示例:
get_day_of_week() - 获取指定周几的日期
语法:
参数说明:
format:返回日期的格式whichDay:1-7,表示周一到周日duration:可选,时间偏移量
示例:
week_of_month() - 本月第几周
语法:
返回值:整数,表示在当月的第几周
示例:
week_of_year() - 本年第几周
语法:
返回值:整数,表示在当年的第几周
示例:
时间戳函数
timestamp() - 毫秒时间戳
语法:
返回值:13位毫秒时间戳
示例:
biz_timestamp() - 业务时间戳(基于00:00:00)
语法:
返回值:13位毫秒时间戳,基于当天00:00:00计算
示例: < ${end} | | 审计日志 | sys_plan_datetime | 记录任务执行时间 |
快速参考表
常用时间参数速查
| 需求 | 参数配置 | 示例结果(基准2023-09-22) |
|---|---|---|
| 今天 | $[yyyy-MM-dd] 或 sys_plan_day | 2023/9/22 |
| 昨天 | $[yyyy-MM-dd, -1d] 或 sys_biz_day | 2023/9/21 |
| 明天 | $[yyyy-MM-dd, 1d] | 2023/9/23 |
| 上周同一天 | $[yyyy-MM-dd, -7d] | 2023/9/15 |
| 上月同一天 | $[yyyy-MM-dd, -1mon] | 2023/8/22 |
| 去年同一天 | $[yyyy-MM-dd, -1y] | 2022/9/22 |
| 本月第一天 | first_day_of_month() | 2023/9/1 |
| 本月最后一天 | last_day_of_month() | 2023/9/30 |
| 上月第一天 | first_day_of_month('yyyy-MM-dd', '-1mon') | 2023/8/1 |
| 上月最后一天 | last_day_of_month('yyyy-MM-dd', '-1mon') | 2023/8/31 |
| 本周一 | first_day_of_week() | 2023/9/18 |
| 本周日 | last_day_of_week() | 2023/9/24 |
| 上周一 | first_day_of_week('yyyy-MM-dd', '-1w') | 2023/9/11 |
| 上周日 | last_day_of_week('yyyy-MM-dd', '-1w') | 2023/9/17 |
| 本周二 | get_day_of_week('yyyy-MM-dd', 2) | 2023/9/19 |
| 上周三 | get_day_of_week('yyyy-MM-dd', 3, '-1w') | 2023/9/13 |
| 去年昨天 | $[yyyy-MM-dd, -1y, -1d] | 2022/9/21 |
常用格式速查
| 格式需求 | 参数配置 | 示例结果 |
|---|---|---|
| yyyyMMdd | $[yyyyMMdd] | 20230922 |
| yyyy-MM-dd | $[yyyy-MM-dd] | 2023/9/22 |
| yyyy/MM/dd | $[yyyy/MM/dd] | 2023/9/22 |
| yyyyMMddHHmmss | $[yyyyMMddHHmmss] | 20230922180000 |
| yyyy-MM-dd HH:mm:ss | $[yyyy-MM-dd HH:mm:ss] | 2023/9/22 18:00 |
| HH:mm:ss | $[HH:mm:ss] | 18:00:00 |
| 毫秒时间戳 | timestamp() | 1695463200000 |
| 秒时间戳 | unix_timestamp() | 1695463200 |
系统参数速查
| 参数名 | 说明 | 格式 | 调度运行 | 临时运行 |
|---|---|---|---|---|
| bizdate | 业务日期(计划时间-1天) | yyyyMMdd | ✓ | ✓ |
| sys_biz_day | 业务日期 | yyyy-MM-dd | ✓ | ✓ |
| sys_biz_datetime | 业务时间 | yyyy-MM-dd HH:mm:ss | ✓ | ✓ |
| sys_plan_day | 计划日期 | yyyy-MM-dd | ✓ | ✓ |
| sys_plan_datetime | 计划时间 | yyyy-MM-dd HH:mm:ss | ✓ | ✓ |
| sys_plan_timestamp | 计划时间戳 | 13位毫秒 | ✓ | ✓ |
| sys_task_id | 任务ID | 整数 | ✓ | ✗ |
| sys_task_name | 任务名称 | 字符串 | ✓ | ✗ |
| sys_task_owner | 任务负责人 | 字符串 | ✓ | ✗ |
偏移量单位速查
| 单位 | 缩写 | 全称 | 示例 |
|---|---|---|---|
| 毫秒 | ms | milli/millisecond | 400ms |
| 秒 | s | sec/second | 30s |
| 分钟 | m | min/minute | 15m |
| 小时 | h | hour | 2h |
| 天 | d | day | -1d |
| 周 | w | week | -1w |
| 月 | mon | month | -1mon |
| 年 | y | year | -1y |
时间函数速查
| 函数 | 功能 | 示例 |
|---|---|---|
| first_day_of_month() | 当月第一天 | first_day_of_month('yyyy-MM-dd', '-1mon') |
| last_day_of_month() | 当月最后一天 | last_day_of_month() |
| first_day_of_week() | 当周第一天(周一) | first_day_of_week('yyyy-MM-dd') |
| last_day_of_week() | 当周最后一天(周日) | last_day_of_week() |
| day_of_week() | 返回周几(1-7) | day_of_week('-1d') |
| week_of_month() | 本月第几周 | week_of_month() |
| week_of_year() | 本年第几周 | week_of_year() |
| get_day_of_week() | 获取指定周几的日期 | get_day_of_week('yyyy-MM-dd', 2, '-1w') |
| timestamp() | 毫秒时间戳 | timestamp(-1d) |
| biz_timestamp() | 业务时间戳(00:00:00) | biz_timestamp(-1d) |
| unix_timestamp() | 秒时间戳 | unix_timestamp() |
| biz_unix_timestamp() | 业务秒时间戳 | biz_unix_timestamp() |
| biz_format() | 业务时间格式化 | biz_format('yyyy-MM-dd', -1d) |
实际场景示例
场景1:处理昨天的分区数据
需求:每天凌晨处理前一天的订单数据
参数配置:
yesterday=$[yyyy-MM-dd, -1d]
说明:假设任务在2023-09-22执行,参数替换为 2023-09-21
场景2:生成月报(上月数据统计)
需求:每月1号生成上月的销售报表
参数配置:
last_month_start=first_day_of_month('yyyy-MM-dd', '-1mon')last_month_end=last_day_of_month('yyyy-MM-dd', '-1mon')
说明:假设在2023-09-01执行
last_month_start→2023-08-01last_month_end→2023-08-31
场景3:周报统计(上周一到周日)
需求:每周一生成上周的用户活跃报告
参数配置:
last_week_monday=first_day_of_week('yyyy-MM-dd', '-1w')last_week_sunday=last_day_of_week('yyyy-MM-dd', '-1w')
说明:假设在2023-09-25(周一)执行
last_week_monday→2023-09-18(上周一)last_week_sunday→2023-09-24(上周日)
场景4:获取每周二的数据
需求:定期分析每周二的促销活动效果
参数配置:
this_tuesday=get_day_of_week('yyyy-MM-dd', 2)
说明:
- 假设任务在2023-09-22(周五)执行 →
2023-09-19(本周二) - 假设任务在2023-09-25(周一)执行 →
2023-09-26(本周二)
场景5:时间戳范围查询(查询今天全天数据)
需求:实时查询今天00:00:00到当前时间的订单数据
Q4:临时运行和调度运行的参数有什么区别?
| 维度 | 临时运行 | 调度运行 |
|---|---|---|
| 参数来源 | 弹窗手动输入 | 参数配置中的取值 |
| 生效范围 | 仅本次运行 | 每次调度都生效 |
| 时间基准 | 点击运行的时刻 | 调度计划时间 |
| 任务信息参数 | 不支持(无实际任务实例) | 支持 sys_task_* 系列参数 |
| 适用场景 | 调试、验证 | 生产环境自动运行 |
注意:临时运行时输入的参数值不会保存到参数配置中,参数配置中只保存参数赋值的逻辑(表达式或常量)。
Q5:如何验证参数配置是否正确?
使用简单查询验证
参数配置:lastDay = add_days('yyyy-MM-dd', -1)
查看执行日志 执行后查看日志中的实际执行SQL,确认参数是否正确替换。
如果返回昨天的日期(如 2023-09-21),说明参数功能正常。
Q6:Python任务中如何使用参数?
示例:
参数配置:
yesterday=$[yyyy-MM-dd, -1d]start_ts=biz_timestamp()task_name=sys_task_name
注意:
- 字符串类型参数需要加引号:
'${yesterday}' - 数值类型参数不加引号:
${start_ts}
Q7:如何处理月末日期偏移问题?
问题:1月31日减1个月应该是12月31日,但有些月份没有31日
解决方案:使用 last_day_of_month() 函数
Q8:如何调试复杂的参数表达式?
技巧1:逐步验证
技巧2:使用注释说明
在参数配置中也添加说明,方便后续维护。
Q9:参数加密后如何修改?
步骤:
- 点击参数配置,找到加密的参数
- 取消勾选"加密取值"
- 参数值会明文显示,可以修改
- 修改完成后重新勾选"加密取值"
注意:加密仅用于显示,不影响参数的实际使用。
附:如何确认是否支持完整参数功能
使用以下验证SQL:
参数配置:
lastDay赋值填写add_days('yyyy-MM-dd', -1)
校验逻辑:
