文章插图
?所以在SHELL中传参的时候,根据给的固定语法前,必须得加上单引号,否则语法无法通过 。上述的例子也仅仅是 Key 后面跟的常量参数,事实上我们往往都是需要动态传参数的,所以 SHELL 的这种静态传递参数给下游其实是没有意义的,因为如果是静态的,我们为什么不选择in中输入参数呢? 如下图所示

文章插图
?我们在不同任务之间上下游之间的参数传递,往往是需要动态的/上游某个代码执行后的结果传递给下游 。 我们不妨来试试这种方式是否可以?根据猜想我们编写如下案例: 任务1:

文章插图
? 任务2:

文章插图
?

文章插图
? 查看test2的日志并未有任何执行结果打印出

文章插图
? 根据上面的猜测,由于在使用的时候我们整体上加了单引号,又根据shell语法的经验,所以笔者决定在引用变量的时候再加单引号试试,也就是如下形式:echo '${setValue(key='$value')}'
我们来继续实验:【DophineSheduler上下游任务之间动态传参案例及易错点总结】value=https://www.huyubaike.com/biancheng/`date`echo $valueecho"-------------start-----------"echo '${setValue(key='$value')}'echo "-------------end----------------"

文章插图
?查看任务2的执行结果日志:

文章插图
? 我们看到出现了最终想要的执行结果日志,也就是说想要动态传参必须采用如下模式才能成功~ echo '${setValue(key='$value')}'
注意:在海豚调度器在 3.0.0-beta-1 版本后修复了这一问题,可以更好的支持动态传参问题,比如动态地获取现有的本地或 HTTP 资源并获取设定变量 。 具体使用方法如下:lines_num=$(wget https://raw.githubusercontent.com/apache/dolphinscheduler/dev/README.md -q -O - | wc -l | xargs)echo "#{setValue(set_val_var=${lines_num})}"

文章插图
? 总体传参串联任务案例第一步:设置任务输出参数

文章插图
? 第二步:获取第一步参数并打印输出,且继续传参

文章插图
? 第三步:使用SQL语句获取第一步传递的参数 ,并把结果传递给下游 。

文章插图
? 引用参数时候,直接引用自定义输出参数的 Key 就可以了,比如本案例的 output ,一般采用${output}的形式,具体如下图所示:

文章插图
?第四步:获取第三步的执行结果参数,并将结果输出~

文章插图
?【注意点】如果是sql任务:sql结尾不要有分号(;)否则会报错 。 整体流程如下图所示

文章插图
?查看最终(邮件结果)如下:

经验总结扩展阅读
- 通过Thread Pool Executor类解析线程池执行任务的核心流程
- 光遇双十一任务怎么做
- 原神双重任务晋级与调查攻略
- DNF七夕鹊桥来相会任务怎么做?
- 解决qq登录后电脑右下角任务栏不显示qq图标?
- 刺激战场怎样做每日任务成长任务怎么做?
- lol奥德赛2芯片任务怎么过?
- LOL奥德赛2芯片任务需要什么阵容才能通关?
- 2018DNF穿戴耳环任务流程?
- 苹果手机同屏多画面的功能设置 在iPhone 上利用“画中画”执行多任务