若任务需要周期性调度运行,用户需定义该任务的调度相关属性,包括调度周期、调度依赖、调度参数等。
注意事项
- 已开启工作空间调度开关。仅当 DataWorks 工作空间开启启用调度周期开关后,工作空间中的任务才可以根据其配置自动调度运行。
- 任务的调度配置仅用于定义任务调度运行时的相关属性,任务需通过发布流程发布至生产环境后,才会根据该配置进行最终调度。
- 调度时间仅定义任务预期执行时间,其实际执行时间还受上游依赖执行情况控制。
- DataWorks 支持多种类型任务互相依赖。
- DataWorks 上,调度任务会根据调度类型及周期数生成相应的实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),并通过周期实例的方式自动调度运行该任务。
- 在使用调度参数的情况下,DataWorks 调度任务各周期代码入参由该周期对应的定时时间以及您调度参数表达式最终决定。
配置节点调度属性
在节点的调度配置页面,您需根据下表配置节点的调度属性。
- 基础属性
配置项 | 说明 |
基础属性 | 包括节点的名称、节点ID、节点类型、责任人等。
|
- 调度参数
配置项 | 说明 |
参数(可选) | 用于定义节点调度时使用的参数。DataWorks 提供内置参数及自定义参数,可供任务在调度时实现参数动态赋值。说明:若您在编辑节点代码时,在代码中定义了变量,需在此处对该变量进行赋值。 |
- 时间属性
配置项 | 说明 |
时间属性 | DataWorks上任务调度将通过生成对应实例来执行,此处用于定义任务在生产环境的周期调度方式。
|
- 资源属性
配置项 | 说明 |
资源属性 | 用于定义该任务发布至生产环境调度运行时使用的调度资源组。 |
- 调度依赖
配置项 | 说明 |
调度依赖 |
用于定义该任务的上下游依赖关系。通过依赖关系有序调度运行上下游节点,即当上游节点运行成功后,下游节点才会启动运行,保障适时的产出有效业务数据。您可使用自动解析快速设置节点依赖,也可手动设置节点的依赖关系。
|
- 节点上下文
配置项 | 说明 |
节点上下文(可选) | 用于定义上下游任务间的参数传递,定义后,可在下游节点中使用该参数获取上游节点传递过来的值。 |
配置基础属性
您可以在调度配置对话框查看调度节点的名称、节点ID、节点类型,并配置责任人、描述等基本信息。
参数 | 描述 |
名称 | 新建数据开发节点时输入的节点名称,不可以修改。 |
节点ID | 数据开发节点提交后会生成唯一的节点ID,不可以修改。 |
节点类型 | 新建数据开发节点时选择的节点类型,不可以修改。 |
责任人 | 数据开发节点的责任人。默认为当前登录用户,您也可以根据实际需求修改责任人说明:空间管理员可修改,且仅支持选择当前 DataWorks 工作空间中的成员为责任人。 |
描述 | 调度节点的描述。通常用于呈现节点业务、用途等信息。 |
配置调度参数
调度参数支持的格式
调度参数是 DataWorks 任务调度时使用的参数,可根据您配置的调度参数取值规则,在每次任务运行时自动替换为真实的取值,实现任务调度时间内参数的动态替换。
背景信息
您可在代码中通过 ${变量名}
的方式定义变量,并在 调度配置 > 参数 界面,通过调度参数表达式为代码中的变量赋值,实现调度场景下的代码动态入参。部分节点的调度参数配置存在差异(例如,通用 Shell 节点中的变量只能以 $1、$2、$3...
命名)
调度参数支持赋值常量,即每次进行任务调度时,该参数传入同一个值。如需在调度参数中为参数赋值常量,您可根据下图进行相应配置:
调度参数的相关概念
调度参数通常会被用于指代某些动态时间的场景,此场景下,您可基于业务日期和定时时间进行调度参数的取值设置。配置调度参数前,您可先了解这两个时间概念,便于后续设置调度参数取值。
概念 | 描述 |
业务日期 | 指昨天,在离线计算场景下,交易日期为业务发生的日期。DataWorks 默认取调度时间内,任务预期调度运行时间的前一天(即昨天)的日期为业务日期,精确到天。例如,今天统计前一天的营业额,此处的前一天,指交易发生的日期,也就是业务日期。 |
定时时间 | 指今天,即某业务数据加工任务的预期执行时间。DataWorks 默认取调度时间内,任务预期调度运行的时间点(即今天)为定时时间,精确到秒。任务预期执行时间,与实际开始执行时间并非完全一致。任务实际开始执行时间受多方因素影响。 |
调度参数支持的格式
通常,调度参数用于获取不同的时间数据,您可根据业务需求,选择基于业务日期或定时时间获取相应时间数据。
说明:DataWorks 提供了部分内置变量,其格式固定,为了使用更加灵活,建议您通过以下方式自定义时间格式。
取值方式 | 参数格式 | 参数示例 | 相关参考 |
基于业务日期获取时间数据。 | 通常,使用大括号 ${...} ,结合 yyyy 、yy 、mm 及 dd 自定义组合生成时间参数,获取业务日期前后多少年、月、天。说明:业务日期为定时时间所在日期-1。即 ${yyyymmdd} 的取值与 $[yyyymmdd-1] 取值一致。 |
可通过 ${yyyymmdd} 、${yyyy-mm-dd} 等 ${...} 自定义时间格式获取,例如:${yyyymmdd±N} ${yyyymmdd±7*N} ${yy±N} ${mm} ${yyyy-mm-dd±N} |
更多赋值示例,请参见自定义参数 ${...}。 |
基于任务定时时间获取时间数据。 | 通常,使用中括号 $[...] ,结合 yyyy 、yy 、mm 、dd 、hh24 、mi 及 ss 自定义组合生成时间参数,获取定时时间前后多少年、月、天、小时、分钟、秒。 |
可通过 $[yyyymmddhh24miss] 等 $[...] 自定义时间格式获取。例如,取前一天的前一小时,参数表达式为 $[yyyymmdd-1-1/24] 。 |
调度参数无法覆盖的场景(即通过上述表达式无法直接获取预期格式的参数赋值),您可先通过上述方式获取时间格式数据,再执行下表操作获取相应时间。
场景示例 | 操作说明 | 相关参考 |
通过引擎函数将时间格式的内容加工为时间戳。 | 在代码中使用引擎函数获取目标时间。 | 调度参数返回值二次处理的典型场景 |
${mm}01 :获取每月1号。 |
通过纯字符串拼接,获取目标时间。 | 无 |
使用调度参数的注意事项
${…}
参数相关取 N 年前、N 月前的时间数据需使用 ${…}
参数。
${…}
参数只能精确到年月日,因此 ${…}
参数不支持 ${yyyy-mm-dd-1/24}
用法。${…}
参数。例如,${yyyy-N}
、${mm-N}
。$[…]
参数相关$[…]
参数。$[…]
参数基于时分秒进行替换,无法根据 $[yyyy-N]
、$[mm-N]
时间格式获取多少年前、多少月前的时间数据。单独取年份、月份,请使用 ${…}
参数。$[…]
参数。例如,$[yyyy-mm-dd-1-1/24]
。$[...]
调度参数替换值不随实例实际运行时间改变。$[...]
根据实例定时时间取值,调度参数替换值在实例生成时已确定,因此调度参数的替换值不会随着实例实际运行时间而改变。详情请参见附录:调度参数与业务日期、定时时间、实际运行时间的关系。
${bizdate}
变量名说明${bizdate}
变量名,该变量名无特殊含义。您可根据业务需求自定义代码中的变量名。
附录:参数列表
自定义参数 ${...}
及 $[...]
的功能差异,详情请参见 ${…} 和 $[…] 参数的功能差异。
- 自定义参数 ${...}
常用取值示例如下。
基于业务日期加减周期 | 获取方式 |
前/后 N 年 | ${yyyy±N} |
前/后 N 月 | ${yyyymm±N} |
前/后 N 周 | ${yyyymmdd±7*N} |
前/后 N 天 | ${yyyymmdd±N} |
年月日加/减 N 天 | ${yyyymmdd±N} |
加/减 N 年(yyyy格式) | ${yyyy±N}年 |
加/减 N 年(yy格式) | ${yy±N}年 |
多少月前
、多少年前
等时间数据,建议使用 ${...}
参数。${…}
参数仅支持对天、月、年时间进行加减。- 自定义参数 $[...]
常用取值示例如下。
基于定时时间加减周期 | 获取方式 |
后 N 年 | $[add_months(yyyymmdd,12*N)] |
前 N 年 | $[add_months(yyyymmdd,-12*N)] |
后 N 月 | $[add_months(yyyymmdd,N)] |
前 N 月 | $[add_months(yyyymmdd,-N)] |
前/后 N 周 | $[yyyymmdd±7*N] |
前/后 N 天 | $[yyyymmdd±N] |
前/后 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] $[yyyy-15/24/60] $[yyyymm-15/24/60] $[yyyymmdd-15/24/60] $[hh24-15/24/60] $[mi-15/24/60] |
多少小时
、多少分钟
前等时间数据请使用 $[...]
参数。基于如下调度任务设置,解析对应的参数。
说明:当前时间为 2025年01月23日,任务每天 00:00 定时运行。
参数格式 | 调度参数赋值 | 参数替换结果 |
${var1} |
var1=$cyctime |
var1=20250123000000 |
${var2} |
var2=$[mm-1/24] |
var2=01 |
${var3} |
var3=$[yyyy-1/24] |
var3=2025 |
${var4} |
var4=$[yyyymm-1/24] |
var4=202501 |
${var5} |
var5=$[yyyymmdd-1/24] |
var5=20250122 |
${var6} |
var6=$[yyyymmdd-1-1/24] |
var6=20250121 |
${var7} |
var7=$[yyyy-15/24/60] |
var7=2025 |
${var8} |
var8=$[yyyymm-15/24/60] |
var8=202501 |
${var9} |
var9=$[yyyymmdd-15/24/60] |
var9=20250122 |
${var10} |
var10=$[hh24-15/24/60] |
var10=23 |
${var11} |
var11=$[mi-15/24/60] |
var11=45 |
- 系统内置参数
DataWorks 支持下表的系统参数,可用于设置调度参数的取值。但该方式灵活性差,建议参考上文描述,使用自定义参数的方式设置调度参数取值。
内置参数 | 定义 |
$bizdate | 业务日期,格式为 yyyymmdd ,与自定义参数 ${yyyymmdd} 取值一致。该参数的应用较为广泛,日常调度中默认任务预期运行时间的前一天为业务日期。 |
$cyctime | 任务的定时时间,格式为 yyyymmddhh24miss ,与自定义参数 $[yyyymmddhh24miss] 取值一致。 |
$gmtdate | 当前日期,格式为 yyyymmdd 。该参数默认取当天日期,执行补数据操作时输入的日期为 业务日期+1。 |
$bizmonth | 业务月份,格式为 yyyymm 。$bizmonth=业务日期月份-1 。$bizmonth=业务日期月份 。 |
$jobid | 任务的定时时间,格式为 yyyymmddhh24miss ,与自定义参数 $[yyyymmddhh24miss] 取值一致。 |
$nodeid | 节点 ID。 |
$taskid | 节点产生的实例 ID。 |
附录:调度参数与业务日期、定时时间、实际运行时间的关系
关系类别 | 说明及示例 |
调度参数与实际运行时间的关系 | 调度参数替换值在实例生成时已确定,因此,调度参数的替换值不会随着实例实际运行时间的改变而发生变化。 |
调度参数与任务定时时间的关系 | 当调度参数取小时、分钟时,参数替换值由实例的定时时间决定,即由节点调度配置的定时调度时间决定。例如,当前节点为小时调度节点,并且设置定时调度时间为 00:00~23:59,每小时调度一次,则: |
调度参数与业务日期、定时时间的关系 |
自定义参数 ${…} 和 $[…] 的功能差异
自定义参数分为系统内置参数、自定义参数 ${..}
、自定义参数 $[...]
、常量,不同类别的参数赋值格式及取值不同。本文为您介绍不同格式自定义参数的取值差异对比情况。
不同格式自定义参数的应用对比
以当前时间为 2021年11月01日
,任务每天 00:00
定时运行,示例不同格式自定义参数的赋值情况,具体如下表。
说明:
假设代码引用方式均为 pt=${datetime}
。
参数格式 | 描述 | 调度参数赋值 | 参数替换结果 |
${yyyymmdd} |
获取业务时间。 | datetime=${yyyymmdd} |
datetime=20211031 |
$[yyyymmddhh24miss] |
获取定时时间,精确到秒。 | datetime=$[yyyymmddhh24miss] |
datetime=20211101000000 |
$bizdate |
获取业务时间。 | datetime=$bizdate |
datetime=20211031 |
$cyctime |
获取定时时间,精确到秒。 | datetime=$cyctime |
datetime=20211101000000 |
$gmtdate |
获取当前时间,精确到天。 | datetime=$gmtdate |
datetime=20211101 |
$bizmonth |
获取业务月份。 | datetime=$bizmonth |
$bizmonth 的值为当前时间上个月的月份。$bizmonth 的值为业务时间的月份。2021年11月01日 2021年11月02日 (当前月份),则 datetime=202110 。2021年10月31日 (非当前月份),则 datetime=202110 。 |
${…} 和 $[…] 参数的功能差异
${…} 和 $[…] 参数的功能差异如下表所示。
本文以 ODPS SQL 节点为例,假设当前时间为 2021年07月20日10时30分00秒,为您展示 ${…} 和 $[…] 参数的时间取值配置,具体如下表。
时间取值 | ${…} 参数 | $[…] 参数 |
取年份:2021 | datetime=${yyyy} pt=${datetime} pt=2021 |
datetime=$[yyyy] pt=${datetime} pt=2021 |
取年份:21 | datetime=${yy} pt=${datetime} pt=21 |
datetime=$[yy] pt=${datetime} pt=21 |
取年份:2020 | datetime=${yyyy-1} pt=${datetime} pt=2020 |
不支持(详见调度参数注意事项) |
取月份: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 |
取日期:2021-06-20 | datetime=${yyyy-mm-dd-29} pt=${datetime} pt=2021-06-20 |
datetime=$[add_months(yyyy-mm-dd,-1)] pt=${datetime} pt=2021-06-20 |
取日期:2021-07-19 | datetime=${yyyy-mm-dd} pt=${datetime} pt=2021-07-19 |
datetime=$[yyyy-mm-dd-1] pt=${datetime} pt=2021-07-19 |
取日期:2020-07-20 | datetime=${yyyy-mm-dd-364} pt=${datetime} pt=2020-07-20 |
datetime=$[add_months(yyyy-mm-dd,-12*1)] pt=${datetime} pt=2020-07-20 |
取时间:10:30:00 | 不支持 | datetime=$[hh24:mi:ss] pt='${datetime}' pt='10:30:00' |
取时间:2021-07-20 10:30:00 | 不支持 |
重要:调度参数赋值表达式中不支持空格,您可以使用两个调度参数,然后在代码引用时使用空格进行拼接。
datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss] pt='${datetime1}' || ' ' || '${datetime2}' datetime1='2021-07-20' datetime2='10:30:00' pt='2021-07-20 10:30:00' |
取时间:2021-07-20 10:29:00 | 不支持 | datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss-1/24/60] pt='${datetime1}' || ' ' || '${datetime2}' datetime1='2021-07-20' datetime2='10:29:00' pt='2021-07-20 10:29:00' |
取时间:2021-07-20 09:30:00 | 不支持 | datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss-1/24/60] pt='${datetime1}' || ' ' || '${datetime2}' datetime1='2021-07-20' datetime2='10:29:00' pt='2021-07-20 10:29:00' |
取前一天时间,精确到秒,且年月日与时分秒之间无空格: 2021071910:30:00 | 不支持 | datetime=$[yyyymmddhh24miss-1] pt='${datetime}' datetime='2021071910:30:00' pt='2021071910:30:00' |
取前一天时间,精确到秒,且年月日与时分秒之间有空格: 20210719 10:30:00 | 不支持 | datetime1=$[yyyymmdd-1] datetime2=$[hh24:mi:ss] pt='${datetime1}' || ' ' || '${datetime2}' datetime1='20210719' datetime2='10:30:00' pt='20210719 10:30:00' |
配置并使用调度参数
调度参数是根据任务调度的业务时间及调度参数的取值格式自动替换为具体的值,实现在任务调度时间内参数的动态替换。本文为您介绍如何配置及使用调度参数,并以 ODPS SQL 节点为例,讲解调度参数配置完成后使用冒烟测试功能测试调度参数的替换情况。
调度参数配置流程
调度参数的配置流程如下表。
序号 | 描述 | 相关参考 |
1 | 您需在节点代码中通过 ${变量名} 的方式定义变量,再前往调度配置 > 参数 界面为变量赋值调度参数。 |
定义变量 |
2 | 通过可视化及表达式两种方式为代码中的变量赋值。 | 为变量赋值调度参数 |
3 | 通过调度参数预览功能,单独测试调度参数在调度场景下的替换情况。 | 测试调度参数替换情况 |
4 | 通过开发环境冒烟测试功能,测试调度场景下代码执行与参数替换情况。 | 测试代码执行及调度参数替换情况 |
5 | 测试通过后,任务发布至生产环境,您需在生产运维中心的周期任务界面,确认生产环境任务使用的调度参数是否符合预期。 | 确认生产环境任务的调度参数配置 |
配置调度参数,并验证参数执行情况的完整示例,详情请参见完整配置示例。配置调度参数时的常见问题,请参见调度参数。
定义变量
您可根据业务需求,参考下图步骤在代码中自定义变量,并在 调度配置 > 参数 中为变量赋值。
说明:
部分节点会自带 ${bizdate}
变量名,该变量名自动赋值为 $bizdate
,您可替换代码中 bizdate
变量名为自定义的变量名。
为变量赋值调度参数
测试调度参数替换情况
测试代码执行及调度参数替换情况
- 执行冒烟测试
- 查看冒烟测试日志
确认生产环境任务的调度参数配置
完整配置示例
场景示例
调度参数配置最佳实践
- 参数介绍
DataWorks 支持在代码中定义参数,并在调度配置中对参数进行赋值。赋值时支持赋值常量和调度时间表达式。
定义参数的方法:在代码中可通过 ${参数名}
方式声明参数,在右侧调度配置中可使用常量或调度时间表达式给参数赋值。
说明:Shell 及 PyODPS 声明参数的方法比较特殊,详情请参见不同类型节点调度参数配置示例。
- 系统调度参数
bizdate
是 DataWorks 上的系统调度参数,当参数赋值为 =$bizdate
时,默认获取前一天的日期。
参数定义 | 含义 | 日期格式 | 参考样例 |
variate=$bizdate |
获取业务日期。 | yyyymmdd |
variate=20221121 |
- 自定义调度参数
DataWorks 除系统调度参数外,还支持自定义调度参数。自定义调度参数有两种赋值模式,分别为 $[]
和 ${}
。
参数定义 | 含义 | 支持的日期格式 | 参考样例 |
variate1=$[yyyymmddhh24miss] |
获取任务执行的定时时间,可精确到时、分、秒。 | yyyy、yy、mm、dd、hh24、mi 及 ss。 | variate1=20221122010000 |
variate2=${yyyymmdd} |
获取业务日期,只能精确到年、月、日。 | yyyy、yy、mm 及 dd。 | variate2=20221121 |
各类型节点的调度参数配置示例
除通用 Shell 节点、PyODPS 节点外,其他类型节点均可参考 SQL 类型节点(例如,ODPS SQL)的配置方式定义参数并为参数赋值。通用 Shell 节点、PyODPS 节点的调度参数使用存在部分差异。本文为您介绍各类型节点的调度参数配置示例。
SQL类型节点及离线同步节点
SQL 类型节点及离线同步节点的调度参数配置与多数类型节点的配置相似,可供多数节点参考使用。本文以 ODPS SQL 节点为例,为您展示如何为系统内置变量及自定义参数赋值,并在代码中进行调用。
如上图,在参数赋值区域为参数赋值,然后进入代码调用区域引用系统内置变量 var1、var3,自定义参数 var2、var4,常量 var5。赋值示例如下:
- 系统内置变量 var1 赋值取业务时间:
var1=$bizdate
- 系统内置变量 var3 赋值取任务定时时间:
var3=$cyctime
- 自定义参数 var2 赋值取业务时间:
var2=${yyyymmdd}
- 自定义参数 var4 赋值取定时时间:
var4=$[yyyymmddhh24:mi:ss]
- 常量 var5 参数赋值为 abc:
var5=abc
配置及使用调度参数,详情请参见配置并使用调度参数,更多调度参数的赋值方式,详情请参见调度参数支持的格式。
PyODPS节点
为避免代码入侵,PyODPS 节点不支持在代码中直接使用 ${param_name}
格式的字符串替换定义的变量。执行代码前,您需要从类型为 dict(字典对象)的 args
全局变量中获取调度参数。
如上图,在参数赋值区域为参数赋值,然后进入代码调用区域引用内置参数 var1,自定义参数 var2、var3。添加字典对象后的参数为 args['var1']
、args['var2']
、args['var3']
。赋值示例如下:
- 内置参数 var1 赋值取业务时间:
var1=$bizdate
- 自定义参数 var2 赋值取业务时间:
var2=${yyyymmdd}
- 自定义参数 var3 赋值取业务时间:
var3=$[yyyymmdd]
通用Shell节点配置示例
通用 Shell 节点中的变量不允许自定义命名,只能以 $1、$2、$3...
命名(参数序号由小到大,依次递增),当参数的数量大于 10 时,请使用 ${10}
的方式声明变量。
调度参数返回值二次处理的典型场景
配置时间属性
时间属性配置说明
实例生成方式:发布后即时生成实例
调度周期:分钟调度
调度周期:小时调度
调度周期:日调度
调度周期:周调度
调度周期:月调度
调度周期:年调度
场景:如何配置业务流程定时时间
配置资源组
常见问题
提交节点
调度参数
参考资料
原创文章,转载请注明出处:http://www.opcoder.cn/article/85/