参数配置

快速索引

本文较长,若对系统参数有基本了解,只是寻找满足需求的系统参数,可点击下面的链接跳转过去
系统参数:业务日期、计划时间、当前月、上个月
时间基准线:$[]、${}、$()
时间增减:取yyyyMMdd、yyyyMMdd-3、add_months(yyyyMMdd,12*3)
分隔符:yyyy-MM-dd
多因素结合:输出MM-dd、dd HH:mm:ss、Unix时间戳、ISODate类型

概述

为使任务自动周期运行时能动态适配环境变化,离线开发提供了参数配置的功能,参数的应用场景十分广泛,例如同步任务中将增量数据写入Hive表的天分区,需要在分区填写栏支持系统变量。SQL任务中,需要将每天的数据写入新的分区,也需要引用变量。
参数配置可分为「系统参数」和「自定义参数」2大类,系统参数是内置的,用户可在各任务类型中直接引用,当系统参数的格式或处理方式无法满足要求时,离线开发支持自定义参数,下面详细描述:

系统参数

参数名称

离线开发自带如下几个系统参数:

${bdp.system.bizdate}   --业务日期,业务日期默认为计划运行日期的前一天,格式:yyyyMMdd
${bdp.system.bizdate2}  --业务日期,格式:yyyy-MM-dd
${bdp.system.cyctime}   --计划时间,格式:yyyyMMddHHmmss
${bdp.system.premonth}  --上个月(以计划时间为基准),格式:yyyyMM
${bdp.system.currmonth} --当前月(以计划时间为基准),格式:yyyyMM
${bdp.system.runtime}   --当前时间,即任务实际运行的时间,格式:yyyyMMddHHmmss
定时运行时间,不是任务实际开始运行的时间,若设置了每天02:00开始运行,但此时系统资源不足,则任务会延迟执行,假设任务在02:12开始实际运行,但上述几个参数的取值基准依然为02:00

设置方式

在调度系统中运行时,无须在编辑框设置,可直接在代码中引用,如下图所示:

image.png

入门示例
假设存在一张分区表,以ds作为分区字段,有数据同步任务每天向这张表的一个新的分区写入数据,其分区名由业务日期命名,例如20180412。现需要每天对此表的数据做处理,但只需要处理 当前日期为2018年4月13日,查询此表在20180412分区的数据的SQL为:

select * from big_table2 where ds=${bdp.system.bizdate};

此任务运行的日期为2018年4月13日,系统在运行时会将系统参数替换,实际执行的SQL为:

select * from big_table2 where ds=20180412;

自定义参数

简述

在代码中引用 ${key1}${key2}, 然后在「任务参数->自定义参数配置」编辑框设置key1=value1key2=value2 ,如下图所示:

image.png

其中,value1和value2是2个常量字符串,通过在右侧面板设置参数值,任务运行时可进行参数替换,这是常量参数。

在「任务参数->自定义参数配置」中,按照一定的规则填写,可基于时间进行取值,这就是变量参数,如下图所示:

image.png

假设今天为2020年5月31日,在右侧面板设置参数值为 $[yyyyMMdd],在任务运行时,+${key1}+参数即可被替换为20200531,这是自定义参数的基本用法。

基于时间的自定义参数,涉及以下几个问题:

时间基准线

在对自定义参数进行增减之前,需明确取值的时间基准,离线开发支持3种基准线,在右侧的参数面板中分别使用$[] 、${}、 $()3种不同的括号,区分3种时间基准,下面举例说明:

实例的业务日期:2020-05-29 实例的计划运行时间:2020-05-30 12:10:00 实例的实际运行时间:2020-05-30 12:13:31

基准线

引用方式

举例

右侧面板输入

参数替换结果

计划时间

$[]

$[yyyy-MM-dd HH:mm:ss]

2020-05-30 12:10:00

业务日期

${}

${yyyy-MM-dd}

2020-05-29

运行时间

$()

$(yyyy-MM-dd HH:mm:ss)

2020-05-30 12:13:31

如下图所示:

image.png

时间增减

基于计划时间取值的时间增减如下,基于业务日期、运行时间的时间增减方式类似,不再列出

  • 后N年:$[add_months(yyyyMMdd,12*N)],输出yyyyMMdd

  • 前N年:$[add_months(yyyyMMdd,-12*N)],输出yyyyMMdd

  • 后N月:$[add_months(yyyyMMdd,N)],输出yyyyMMdd

  • 前N月:$[add_months(yyyyMMdd,-N)],输出yyyyMMdd

  • 后N周:$[yyyyMMdd+7*N],输出yyyyMMdd

  • 前N周:$[yyyyMMdd-7*N],输出yyyyMMdd

  • 后N天:$[yyyyMMdd+N],输出yyyyMMdd

  • 前N天:$[yyyyMMdd-N],输出yyyyMMdd

  • 后N小时:$[hh24miss+N/24],输出yyyyMMddHHmmss

  • 前N小时:$[hh24miss-N/24],输出yyyyMMddHHmmss

  • 后N分钟:$[hh24miss+N/24/60],输出yyyyMMddHHmmss

  • 前N分钟:$[hh24miss-N/24/60],输出yyyyMMddHHmmss

将上述基于计划时间取值的时间增减方式,[] 修改为 {} 或者 () ,可实现基于业务日期或运行时间进行增减

分隔符

时间增减的基础上,可增加各时间元素之间的分隔符,如下例:
后N年:$[add_months(yyyyMMdd,12N,-)],输出yyyy-MM-dd,在完成日期加减后,后面可输入 ,- 其中的 - 表示各元素的分隔符,例如$[add_months(yyyyMMdd,12N,-)]
此规则适用于时间增减的所有格式。

format函数

系统参数结合时间增减,可满足绝大多数场景的参数需求,但一些特殊场景中,需要定义一些特定的输出格式(例如输出MM-dd)、时间增减等信息,此时可使用format函数来支持。
format函数的使用方法:

$[format(yyyyMMddHHmmss+Nunit,'formatString')]
  • $[]可替换为${}和$(),修改时间基准为业务日期和任务实际运行时间

  • +Nunit,是在做时间增减

    • +表示增加,-表示减少

    • N表示数量,正整数

    • unit表示单位,支持y/M/d/H/m/s/w,分别为:年/月/日/时/分/秒/周,N和unit之间无需字符连接

  • formatString为输出格式,分为3类

    • 普通yyyyMMdd等字符:需符合 Joda-Time标准

    • UnixTimestamp13、UnixTimestamp10:分别输出Unix13位/10位时间戳格式

    • ISODate:输出ISODate格式,例如 2020-06-07T16:11:30Z

  • 使用举例:

    • 业务日期减1天,输出MM-dd格式: ${format(yyyyMMddHHmmss-1d,'MM-dd')}

    • 业务日期减3天,输出MMdd yyyy格式: ${format(yyyyMMddHHmmss-3d,'MMdd yyyy')}

    • 计划时间3周后,输出Unix10位时间戳: $[format(yyyyMMddHHmmss+3w,'UnixTimestamp10')]

format函数的各部分均区分大小写

适用范围

系统参数、自定义参数适用于全部任务类型,可应用于如下领域:

  • 脚本编写类:SQL/Python/Shell、同步任务脚本模式,脚本整体均可使用;

  • 同步任务(向导):分区、过滤语句、字段映射等

  • 资源上传类:参数输入框