Skip to main content

参数配置

日常进行数据开发的过程中,为了使任务自动周期运行时能动态适配环境变化,离线开发提供了参数配置的功能,参数的应用场景十分广泛。例如在同步任务中将增量数据写入Hive表的天分区,需要在分区填写栏支持根据天变化的时间变量;例如在多个Spark SQL任务中需要用到公司统一规定的常量...多个场景都会利用到参数配置的功能。

参数配置可分为「运行参数」和「任务上下游参数」两大类,离线任务目前支持五种运行参数:自定义参数、工作流参数(工作流任务类型)、项目参数、全局参数、基于全局参数的偏移量。

运行参数

离线任务目前支持五种运行参数:自定义参数、工作流参数(工作流任务类型)、项目参数、全局参数、基于全局参数的偏移量。

创建运行参数

一、自定义参数

生效范围:当前任务内

创建方式:在任务开发界面点击「添加运行参数」,参数类型选择“自定义参数”,填写参数名称、参数值、注释

image-20230224155004040

二、项目级参数

生效范围:当前项目内

创建项目参数:在「项目管理->项目设置->项目参数」中添加项目参数,目前支持添加常量类型的参数。

image-20230224155136165

使用项目参数:在IDE中通过${参数名称}进行参数声明,声明后在运行参数下会生成参数信息,参数信息中参数类型选择“项目参数”。

image-20230224155157769

三、全局参数

生效范围:平台内所有租户产品项目下所有任务

创建全局参数:超级管理员控制台**管理员**可以在「控制台 -> 全局配置 -> 全局参数管理」中进行创建

image-20230224155255581

全局参数下支持以下几种参数类型

(1)常量
(2)时间

时间参数是指定时间参数取值时,对参数值进行增减的日期基准。

当「日期基准」选择「自然日」时

是基于自然的时间参数,例如$[yyyymmdd]

当「日期基准」选择「自定义日期」时

是基于自定义日期的时间参数,例如基于一份交易日历以任务运行时间为基准取最近的一个交易日。如图,可以自定义日期格式,并在上传的文件中填写对应格式的日期。

image-20230224155330272

举例说明,例如设置一个自定义日期时间参数为t_date,时间格式为yyyyMMdd,上传文件日期分别是20220601、20220602、20220603、20220617、20220620。

自定义日期1. 请按定义的日期格式填写;2. 日期上限1000个;3. 从第二行开始解析;
20220601
20220602
20220603
20220617
20220620

1、${t_date} = yyyyMMdd取的是当前交易日:

  • 任务执行当天不是个交易日,比如今天是6月15日,自定义日期文件中不存在该交易日,则${t_date} = null
  • 任务执行当天是个交易日,比如今天是6月17日,则${t_date} = 20220617

2、${t_date} = yyyyMMdd - n,则取的是以当前日期为基准,日期文件里的历史最近第n天。

  • 今天是6月15日,n=1,${t_date} = 20220603;
  • 今天是6月17日,n=1,${t_date} = 20220603;
  • 今天是6月17日,n=2,${t_date} = 20220602;

3、${t_date} = yyyyMMdd + n,则取的是以当前日期为基准,日期文件里的未来最近第n天。

  • 今天是6月18日,n=1,${t_date} = 20220620;
  • 今天是6月18日,n=2,${t_date} = null;
  • 今天是6月17日,n=1,${t_date} = 20220620;

(3)按计划时间查找参数值

自定义全局参数支持计划时间查找参数值。和「自定义日期」一样,按照计划时间查找参数值,也需要上传一份文件,如下图所示

image-20230224155508979

随着计划时间的变化,参数值也会根据表格里的对应关系发生变化。

设置一个按计划时间查找参数值t_date:

  • 当计划时间为2023-02-21 00:00:00,参数值${t_date}=20230220
  • 当计划时间为2023-02-22 00:00:00,参数值${t_date}=20230219
  • 当计划时间为2023-02-23 00:00:00,参数值${t_date}=null
计划时间(yyyyMMddhhmmss)参数值
2023022100000020230220
2023022200000020230219

::tip

离线开发自带如下几个全局参数:

${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

:::

使用运行参数

自定义参数

在任务开发界面点击「添加运行参数」,填写参数名称后再在IDE中通过${参数名称}引用。

image-20230224172157477

基于全局参数的偏移量

基于全局参数的偏移以“#”识别全局参数和偏移量内容:${全局参数名称}#${偏移量正负整数}。

下面将会举例说明,全局参数的偏移量如何使用

参数名称参数类型参数值映射值操作
param1基于全局参数的偏移param0#-1-删除

1、当全局参数param0为常量a时,全局参数的偏移不影响参数值

param0#-1=a

param0#+1=a

2、当全局参数param0为基于自然日的全局参数时,假设今天是20221010,实例的计划时间是20221010000000

param0#-1 = 20221009

param0#+1 = 20221011

3、当全局参数param0为基于自定义日期的全局参数时,假设今天是20221010,实例的计划时间是20221010000000,上传自定义日期如下表

自定义日期1. 请按定义的日期格式填写;2. 日期上限1000个;3. 从第二行开始解析;
20221001
20221018
20221019

param0#-1 = 20221001

param0#+1 = 20221018

param0#+5或者param0#-5等超出自定义日期的偏移量,将会报错

4、当全局参数param0为按计划时间查找参数值的全局参数时,假设今天是20221010,实例的计划时间是20221010000000,上传计划时间和参数值对应如下表

计划时间(yyyyMMddhhmmss)参数值
2022100100000020220303
20221010000000a
2022101800000020220101
202210191000002022

param0=a

param0#-1 =20220303

param0#+1 = 20220101

param0#+2 = 2022

param0#+5或者param0#-5等超出表中计划时间外的偏移量,将会报错

工作流参数、项目参数、全局参数的使用

先在工作流参数、项目参数、全局参数中创建参数,在IDE中可以直接通过${参数名称}进行参数声明,声明后会在运行参数下生成参数信息,再去选择对应的参数类型。

例如在任务中声明一个参数test,如果该参数存在于工作流参数或项目参数或全局参数,在右侧运行参数列表中会出现“test”参数,再去指定参数所属的参数类型。

image-20230224172329179

更多使用技巧

时间基准线

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

实例的业务日期:2022-05-31 实例的计划运行时间:2022-06-01 12:10:00 实例的实际运行时间:2022-06-01 12:13:31

基准线引用方式举例
右侧面板输入参数替换结果
计划时间$[]$[yyyy-MM-dd HH:mm:ss]2022/6/1 12:10
业务日期${}${yyyy-MM-dd}2022/5/31
运行时间$()$(yyyy-MM-dd HH:mm:ss)2022/6/1 12:13

如下图所示:

image-20230317174603587

时间增减

  • 基于计划时间取值的时间增减如下,基于业务日期、运行时间的时间增减方式类似,不再列出
  • 后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
tip

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

分隔符

在时间增减的基础上,可增加各时间元素之间的分隔符,如下例:

后N年:$[add_months(yyyyMMdd,12*N,-)],输出yyyy-MM-dd,在完成日期加减后,后面可输入 `,-` 其中的 `-` 表示各元素的分隔符,例如$[add_months(yyyyMMdd,12*N,-)]

此规则适用于时间增减的所有格式。

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标准
    • UnixTimestamp10: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')]
tip

format函数各部分区分大小写

适用范围

运行参数适用于全部任务类型,可应用于如下领域:

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

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

资源上传类:参数输入框

任务上下游参数

info

该功能仅专业版、旗舰版支持

概述

任务运行结束产出的一些结果可能会需要在下游任务中使用,为避免重复计算和维护上的方便,用户可以使用任务上下游参数的功能。

例如A任务是B任务的上游,在A任务中配置的输出参数,可以在B任务中配置输入参数获取到。

流程图.jpg

支持创建任务上下游参数的任务类型目前有:SparkSQL、HiveSQL、Shell、Python(其中通过资源包引用创建的Python任务不支持设置输出参数)、同步任务(仅有输入参数)、工作流及其上述类型的子节点、Shell on agent任务。

在上述任务的「任务参数 - > 任务上下游参数」中可以分别添加输入参数和输出参数,如下图所示

自定义参数图片十二

输出参数

输出参数简介

任务输出参数支持的类型有常量、自定义运行参数和计算结果三种类型。

常量:例如“abc”“12323”等数字或字符串常量

自定义运行参数:例如设置一个“key”,将本任务的自定义运行参数结果传给下游任务。可以将上下游任务共同的参数进行统一管理;

计算结果:对任务的输出表进行取值,例如SQL任务“select a,b from table1 where pt = 20211111”、Python任务“print(a)”、Shell任务“echo a”。平台会把任务输出参数内容写入HDFS文件中。

存储计算结果的文件命名规则:output${参数名称}${任务id}_${计划时间},存储目录:${租户id}/${项目标识}。

同一任务的临时运行/同一实例多次运行会以最新的文件覆盖旧文件。

自定义参数图片十三

配置输出参数

在「任务参数-> 输出参数」点击「添加输出参数按钮」新增一栏空行,如下图。

自定义参数图片十四

参数名称:支持填写1-64字符,只支持大小写英文、数字及下划线;不可与已经配置的任务上下游参数重名;

类型:可选常量、自定义运行参数、计算结果(默认);

内容:根据「类型」选择的结果进行内容填写。

  • 类型选择“计算结果”时,“内容”为文本框,可填写1-1024字符,三种任务的输出参数取值填写格式如下:

SQL任务:select 字段 from 表 where 筛选条件

Python任务:print(内容)

Shell任务:echo 内容

  • 类型选择“常量”时,“内容”为文本框,1-256字符。
  • 类型选择“自定义运行参数”时为下拉框,可选范围为当前任务配置的自定义运行参数。

输入参数

输入参数简介

  • 上游任务配置了输出参数,运行产生结果后,即可在下游任务中使用。

  • 输入参数配置前提:当前任务存在上游依赖任务,且上游任务已配置输出参数并提交。

配置输入参数

如下图,在“spark12344”任务中分别配置了常量输出参数 “value”、计算结果“key”、自定义运行参数“linrong1”,并进行提交;

自定义参数图片十五

并在‘spark12355’任务中,将‘spark12344’配置为上游依赖任务,如下图

自定义参数图片十六

此时可在‘spark1235’任务中「任务参数 -> 任务上线游参数 -> 输入参数」中引入‘spark12344’中的输出参数:在来源任务处选中‘spark12344’,并选中想要引入的输入参数,填写在‘spark12355’中的参数名称,如下图

自定义参数图片十七

输入参数的在任务中的引用方式和全局参数、自定义参数一致,通过${输入参数名称}的方式引入,如下图所示:

自定义参数图片十八

tip

当输出参数为计算结果,select语句查询后包含多个值时,可以通过数组的方式${key}[0][1]进行取值,代表输入参数的第0行,第1列