文章插图
? 作者简介
文章插图
?淡丹 数仓开发工程师5年数仓开发经验,目前主要负责百得利MOBY新车业务二手车业务及售后服务业务系统数仓建设 业务需求在ETL任务之间调度时,我们有的时候会需要将上游的计算结果作为参数传入到下游,针对这种业务需求,海豚调度器为我们提供了一些功能 。 具体如下:DolphinScheduler允许在任务间进行参数传递,目前传递方向仅支持上游单向传递给下游 。支持这个特性的任务类型有:
- Shell
- SQL
文章插图
? 注意点
- 方向选择为 OUT , 只有当方向为 OUT 时才会被定义为变量输出
- 数据类型可以根据需要选择不同数据结构
- Value 部分不需要填写
- 参数名字一定要和字段名字对应,否则不会识别
文章插图
?注意此处,输入参数不需要填写,下游直接引用上游的变量即可 步骤3:上线验证结果查看结果日志,可以看到下游节点已经接收到参数
文章插图
? SHELL任务先看官网说明(链接):https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/guide/parameter/context.html
- prop 为用户指定;
- 方向选择为 OUT , 只有当方向为 OUT 时才会被定义为变量输出;
- 数据类型可以根据需要选择不同数据结构;
- value 部分不需要填写;
文章插图
?SHELL 节点定义的时候日志检测到 ${setValue(key=value1)} 的格式时,会将 value1 赋值给 key,下游节点便可以直接使用变量 key 的值 。同样,您可以在【工作流实例】页面,找到对应的节点实例,便可以查看该变量的值 。
文章插图
? 但在实际使用中官网的例子是跑不通的,这里面有小坑,上述在使用 ${setValue(key=value)} 这种形式传参的时候必须用引号引起来 。 如下才能成功echo '${setValue(key=value)}'
案例所示
文章插图
?上线执行后查看日志如下:
文章插图
?可以看到结果已经打印出来 。如果取掉单引号会报如下错误:语法上就无法通过 。
文章插图
?所以在SHELL中传参的时候 , 根据给的固定语法前 , 必须得加上单引号 , 否则语法无法通过 。上述的例子也仅仅是 Key 后面跟的常量参数,事实上我们往往都是需要动态传参数的,所以 SHELL 的这种静态传递参数给下游其实是没有意义的,因为如果是静态的,我们为什么不选择in中输入参数呢? 如下图所示
文章插图
?我们在不同任务之间上下游之间的参数传递,往往是需要动态的/上游某个代码执行后的结果传递给下游 。 我们不妨来试试这种方式是否可以?根据猜想我们编写如下案例: 任务1:
文章插图
? 任务2:
推荐阅读
- 通过Thread Pool Executor类解析线程池执行任务的核心流程
- 光遇双十一任务怎么做
- 原神双重任务晋级与调查攻略
- 班主任工作任务总结模板
- 教学任务包括哪些方面教案中的 教学任务包括哪些方面
- 抖管家怎么提交任务
- 历史科目教学工作任务总结
- 使命召唤战区挑战任务 使命召唤16战区任务怎么完成
- 光遇的每日任务在哪里找 光遇的每日任务在哪里
- 电脑结束任务快捷键 电脑结束任务按哪一个键