为使任务自动周期运行时能动态适配环境变化,DataWorks提供手动节点参数配置的功能。

配置参数前,您需要注意以下问题:

  • 参数=两边不可以加空格。正确写法示例:bizdate=$bizdate
    无空格
  • 如果存在多个参数,每个参数用空格分开。
    空格

系统参数

DataWorks提供了两个系统参数,定义如下:

  • ${bdp.system.cyctime}:定义为一个实例的定时运行时间,默认格式为yyyymmddhh24miss
  • ${bdp.system.bizdate}:定义为一个实例计算时对应的业务日期,业务日期默认为运行日期的前一天,默认以yyyymmdd的格式显示。

从定义可知,运行时间和业务日期的计算公式为运行时间=业务日期+1

如果使用系统参数,无需在编辑框设置,直接在代码中引用${bizdate}即可,系统将自动替换代码中对这个参数的引用字段。

说明 一个周期任务的调度属性,配置的是运行时间的定时规律,因此可以根据实例的定时运行时间反推业务日期,从而得知每个实例中参数的取值。

入门示例

设置一个ODPS_SQL任务为小时调度,每天00:00-23:59时间段里每隔1小时执行一次。如果想在代码中使用系统参数,可以执行下述语句。

insert overwrite table tb1 partition(ds ='20180606') select
c1,c2,c3
from (
select * from tb2
where ds ='${bizdate}');

非Shell节点配置调度参数

说明 SQL代码中的变量名命名只支持英文的a-z、A-Z、数字和下划线。变量名为date固定会自动赋$bizdate值,不需要在调度参数配置那里赋值,即便赋值了也不会替换到代码中,代码默认替换的还是$bizdate。

在非Shell节点中配置调度参数,需要先在代码里${变量名}(表示引用函数),然后在调度参数的赋值中输入具体的值。

例如odps sql类型节点,代码里${变量名},节点配置参数项变量名=调度内置参数。

在代码中引用的参数,需要在调度中添加上解析的值。
添加解析值

Shell节点配置调度参数

Shell节点的参数配置和非Shell节点配置的步骤一样,只是规则有所不同,Shell节点中的变量不允许自定义命名,只能以$1,$2,$3…命名。

例如Shell类型节点,代码里Shell语法声明: $1调度中节点配置参数配置: $xxx(调度内置参数),即$xxx的值替换代码中的$1。

在代码中引用的参数,需要在调度中添加上解析的值。
解析值
说明 在Shell节点中,参数到达第10个以后,应该使用 ${10} 的方式来声明变量。

变量值为固定值

以SQL类型节点为例,代码中${变量名},节点配置参数项:变量名=固定值,例如select xxxxxx type=’${type}’,如果调度变量赋值为type=‘aaa’,则在调度执行时,代码中会替换为type=‘aaa’。

变量值为调度内置参数

以SQL类型节点为例,代码里${变量名}, 节点配置参数项 变量名=调度参数。

代码:select xxxxxx dt=${datetime}

调度变量赋值:datetime=$bizdate

调度执行时,如果今日是2017年07月22日,代码里会替换成dt=20170721

调度内置参数列表

$bizdate:业务日期(格式yyyymmdd)说明:这个参数是用非常广泛,日常调度默认为前一天的日期。

示例:odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=$bizdate。今日是2017年07月22日,今天节点执行时$bizdate替换的时间即pt=20170721。

示例:odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=$gmtdate。今日是2017年07月22日,今天节点执行时$gmtdate替换的时间即pt=20170722。

示例:odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=$bizdate。今日是2017年07月01日,今天节点执行时$bizdate替换的时间即pt=20130630。

示例:odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=$gmtdate。今日是2017年07月01日,今天节点执行时$gmtdate替换的时间即pt=20170701。

$cyctime参数解释:任务的定时时间,如果天任务无定时,就是当天0点整(精确到时分秒,一般是小时/分钟级调度任务使用) 使用样例:cyctime=$cyctime。

说明 $[] 和${} 配置时间参数区别$bizdate 业务日期,默认为当前时间减一天;$cyctime 任务定时调度时间,如果天任务并没有设置定时,就是当天0点整(精确到时分秒,一般是小时/分钟级调度任务使用),如果定时在0点30运行,以当天为例,就是yyyy-mm-dd 00:30:00如果{}参数,就是以bizdate为基准参与运算,补数据的时候选则什么业务日期,参数替换结果就是什么业务日期。如果是[]参数,是以cyctime为基准参与运行,具体使用方法见以下说明文档,和oracle的时间运算方式一致。补数据的时候,选中什么业务日期,参数替换结果是业务日期+1天,如果补数据选20140510这个业务日期,执行时cyctime替换结果是20140511。

$jobid参数解释:任务所属的工作流ID。示例:jobid=$jobid。

$nodeid参数解释:节点ID。示例:nodeid=$nodeid。

$taskid参数解释:任务ID(节点实例ID)。示例:taskid=$taskid。

$bizmonth:业务月份(格式yyyymm)。
  • 说明:当业务日期的月份等于当前月份时,$bizmonth=业务日期月份-1,否则$bizmonth=业务日期月份。
  • 示例:odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=$bizmonth。今日是2017年07月22日,今天节点执行时$bizmonth替换的时间即pt=201706。

$gmtdate:当前日期(格式yyyymmdd) 说明:此参数默认为当天日期,补数据时传入的是业务日期+1。

${…}自定义参数解释
  • 根据$bizdate参数自定义时间格式,其中yyyy表示4位的年份,yy表示2位的年份,mm表示月,dd表示天。可以将参数任意组合,比如:${yyyy}、${yyyymm}、${yyyymmdd}、${yyyy-mm-dd}等。
  • $bizdate精确到年月日,因此${……}自定义参数也只能表示到年月日级别。
  • 获取+/-周期的方法:

    后N年:${yyyy+N}

    前N年:${yyyy-N}

    后N月:${yyyymm+N}

    前N月:${yyyymm-N}

    后N周:${yyyymmdd+7*N}

    前N周:${yyyymmdd-7*N}

    后N天:${yyyymmdd+N}

    前N天:${yyyymmdd-N}

${yyyymmdd}:业务日期(格式yyyymmdd,值与$bizdate一致)
  • 说明:这个参数是用非常广泛,日常调度默认为前一天的日期。此参数格式可以自定义格式,如${yyyy-mm-dd}格式为yyyy-mm-dd。
  • 示例:odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=${yyyymmdd}。今日是2013年07月22日,今天节点执行时${yyyymmdd}替换的时间即pt=20130721。

${yyyymmdd-/+N} 年月日加减N天

${yyyymm-/+N} 年月加减N月

${yyyy-/+N} 年(yyyy)加减N年

${yy-/+N} 年(yy)加减N年

说明:yyyymmdd表示业务日期,之间可以支持任意分隔符,例如yyyy-mm-dd。上面的几个参数都是取自业务日期的年、月、日。

示例:

  • odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=${yyyy-mm-dd}。今日是2018年07月22日,今天节点执行时${yyyy-mm-dd}替换的时间即pt=2018-07-21。
  • odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=${yyyymmdd-2}。今日是2018年07月22日,今天节点执行时${yyyymmdd-2}替换的时间即pt=20180719。
  • odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=${yyyymm-2}。今日是2018年07月22日,今天节点执行时${yyyymm-2}替换的时间即pt=201805。
  • odps sql节点代码中pt=${datetime},节点配置的参数配置为datetime=${yyyy-2}。今日是2018年07月22日,今天节点执行时${yyyy-2}替换的时间即pt=2016。

odps sql节点配置中多个参数赋值如:startdatetime=$bizdate enddatetime=${yyyymmdd+1} starttime=${yyyy-mm-dd} endtime=${yyyy-mm-dd+1}。

使用示例(假设$cyctime=20140515103000)
  • $[yyyy] = 2014, $[yy] = 14, $[mm] = 05, $[dd] = 15, $[yyyy-mm-dd] = 2014-05-15, $[hh24:mi:ss] = 10:30:00, $[yyyy-mm-dd hh24:mi:ss] = 2014-05-1510:30:00
  • $[hh24:mi:ss - 1/24] = 09:30:00
  • $[yyyy-mm-dd hh24:mi:ss -1/24/60] = 2014-05-1510:29:00
  • $[yyyy-mm-dd hh24:mi:ss -1/24] = 2014-05-1509:30:00
  • $[add_months(yyyymmdd,-1)] = 2014-04-15
  • $[add_months(yyyymmdd,-12*1)] = 2013-05-15
  • $[hh24] =10
  • $[mi] =30

测试$cyctime参数的方法:

实例运行后,右键单击查看节点属性,定时时间就是该实例的周期定时时间。

定时时间减1小时的参数执行替换结果。