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

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

  • 参数=两边不可以加空格。例如:bizdate=$bizdate
  • 如果存在多个参数,需要使用空格分隔每个参数。例如:bizdate=$bizdate datetime=${yyyymmdd}

系统参数

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

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

运行时间和业务日期的计算公式为运行时间=业务日期+1

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

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

入门示例

假设您需要设置一个ODPS_SQL任务为小时调度,每天00:00-23:59时间段里每隔1小时执行一次。如果想在代码中使用系统参数,请参见下述步骤进行操作。

设置一个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),日常调度默认为前一天的日期。
    • 示例1:ODPS SQL节点代码中pt=${datetime},节点参数配置为datetime=$bizdate。假设运行时间是2017年07月22日,则$bizdate替换的时间为pt=20170721。
    • 示例2:ODPS SQL节点代码中pt=${datetime},节点参数配置为datetime=$gmtdate。假设运行时间是2017年07月22日,则$gmtdate替换的时间为pt=20170722。
  • $cyctime
    • 参数说明:任务的定时时间,如果天任务未定时,即当天0点整(精确到时分秒,通常是小时/分钟级调度任务使用)。
      说明
      • $[]和${}配置时间参数区别于$bizdate业务日期,默认为当前时间减一天。
      • $cyctime任务定时调度时间,如果天任务并没有设置定时,即当天0点整(精确到时分秒,通常是小时/分钟级调度任务使用)。

        如果定时在0点30运行,以当天为例,即yyyy-mm-dd 00:30:00

      • 如果{}参数,则以bizdate为基准参与运算,补数据时选择的业务日期和参数替换结果保持一致。
      • 如果是[]参数,则是以cyctime为基准参与运行,和Oracle的时间运算方式一致。补数据时选中什么业务日期,参数替换结果是业务日期+1天。

        例如补数据选择业务日期为20140510,执行时cyctime替换结果是20140511。

    • 示例:假设$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-15 09:30:00
      • $[add_months(yyyymmdd,-1)] = 20140415
      • $[add_months(yyyymmdd,-12*1)] = 20130515
      • $[hh24] =10
      • $[mi] =30
    • 测试$cyctime参数的方法如下所示:

      实例运行后,右键单击实例,选择查看更多详情,定时时间便是该实例的周期定时时间。

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

  • $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。

  • ${…}自定义参数
    • 根据$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}
  • $gmtdate
    • 参数说明:当前日期(格式为yyyymmdd),此参数默认为当天日期,补数据时传入的是业务日期+1。
    • 示例:ODPS SQL节点代码中pt=${datetime},节点配置的参数配置为datetime=$gmtdate。今日是2017年07月22日,今天节点执行时$gmtdate替换的时间即pt=20170722。
  • ${yyyymmdd}
    • 参数说明:业务日期(格式为yyyymmdd,值与$bizdate一致),yyyymmdd之间可以支持任意分隔符,例如yyyy-mm-dd。

      日常调度默认为前一天的日期。此参数格式可以自定义格式,例如${yyyy-mm-dd}格式为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}