Browse Source

[Bug][Worker] Fix duplicated key bug when have out parameters of same name (#12930)

3.1.3-release
Aaron Wang 2 years ago committed by zhuangchong
parent
commit
ce5fda89ca
  1. 4
      docs/docs/en/guide/parameter/context.md
  2. 10
      docs/docs/zh/guide/parameter/context.md
  3. 2
      dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/AbstractParameters.java

4
docs/docs/en/guide/parameter/context.md

@ -17,6 +17,10 @@ DolphinScheduler allows parameter transfer between tasks. Currently, transfer di
When defining an upstream node, if there is a need to transmit the result of that node to a dependency related downstream node. You need to set an `OUT` direction parameter to [Custom Parameters] of the [Current Node Settings]. At present, we mainly focus on the SQL and shell nodes to pass parameters downstream. When defining an upstream node, if there is a need to transmit the result of that node to a dependency related downstream node. You need to set an `OUT` direction parameter to [Custom Parameters] of the [Current Node Settings]. At present, we mainly focus on the SQL and shell nodes to pass parameters downstream.
The value of upstream parameter can be updated in downstream node in the same way as [setting parameter](#create-a-shell-task-and-set-parameters).
Upstream parameter will be override when defining parameter with the same name in downstream node.
> Note: If there are no dependencies between nodes, local parameters cannot be passed upstream. > Note: If there are no dependencies between nodes, local parameters cannot be passed upstream.
### Example ### Example

10
docs/docs/zh/guide/parameter/context.md

@ -17,13 +17,17 @@ DolphinScheduler 允许在任务间进行参数传递,目前传递方向仅支
当定义上游节点时,如果有需要将该节点的结果传递给有依赖关系的下游节点,需要在【当前节点设置】的【自定义参数】设置一个方向是 OUT 的变量。目前我们主要针对 SQL 和 SHELL 节点做了可以向下传递参数的功能。 当定义上游节点时,如果有需要将该节点的结果传递给有依赖关系的下游节点,需要在【当前节点设置】的【自定义参数】设置一个方向是 OUT 的变量。目前我们主要针对 SQL 和 SHELL 节点做了可以向下传递参数的功能。
上游传递的参数可以在下游节点中被更新,更新方法与[设置参数](#创建-shell-任务并设置参数)相同。
如果定义了同名的传递参数,上游节点的参数将被覆盖。
> 注:若节点之间没有依赖关系,则局部参数无法通过上游传递。 > 注:若节点之间没有依赖关系,则局部参数无法通过上游传递。
### 任务样例 ### 任务样例
本样例展示了如何使用参数传递的功能,通过 SHELL 任务来创建本地参数并赋值传递给下游,SQL 任务通过获得上游任务的参数完成查询操作。 本样例展示了如何使用参数传递的功能,通过 SHELL 任务来创建本地参数并赋值传递给下游,SQL 任务通过获得上游任务的参数完成查询操作。
#### 创建 SHELL 任务设置参数 #### 创建 SHELL 任务设置参数
> 用户需要传递参数,在定义 SHELL 脚本时,需要输出格式为 ${setValue(key=value)} 的语句,key 为对应参数的 prop,value 为该参数的值。 > 用户需要传递参数,在定义 SHELL 脚本时,需要输出格式为 ${setValue(key=value)} 的语句,key 为对应参数的 prop,value 为该参数的值。
@ -42,7 +46,7 @@ SHELL 节点定义时当日志检测到 ${setValue(output=1)} 的格式时,会
![context-parameter02](../../../../img/new_ui/dev/parameter/context_parameter02.png) ![context-parameter02](../../../../img/new_ui/dev/parameter/context_parameter02.png)
#### 创建 SQL 任务使用参数 #### 创建 SQL 任务使用参数
完成上述的 SHELL 任务之后,我们可以使用上游所传递的 output 作为 SQL 的查询对象。其中将所查询的 id 重命名为 ID,作为参数输出。 完成上述的 SHELL 任务之后,我们可以使用上游所传递的 output 作为 SQL 的查询对象。其中将所查询的 id 重命名为 ID,作为参数输出。
@ -52,7 +56,7 @@ SHELL 节点定义时当日志检测到 ${setValue(output=1)} 的格式时,会
> >
> 如果 SQL 节点的结果为多行,一个或多个字段,参数的名字需要和字段名称一致。数据类型选择为 LIST。获取到 SQL 查询结果后会将对应列转化为 LIST,并将该结果转化为 JSON 后作为对应变量的值。 > 如果 SQL 节点的结果为多行,一个或多个字段,参数的名字需要和字段名称一致。数据类型选择为 LIST。获取到 SQL 查询结果后会将对应列转化为 LIST,并将该结果转化为 JSON 后作为对应变量的值。
#### 保存工作流设置全局参数 #### 保存工作流设置全局参数
点击保存工作流图标,并设置全局参数 output 和 value。 点击保存工作流图标,并设置全局参数 output 和 value。

2
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/AbstractParameters.java

@ -138,7 +138,7 @@ public abstract class AbstractParameters implements IParameters {
return; return;
} }
if (StringUtils.isEmpty(result)) { if (StringUtils.isEmpty(result)) {
varPool.addAll(outProperty); outProperty.forEach(this::addPropertyToValPool);
return; return;
} }
Map<String, String> taskResult = getMapByString(result); Map<String, String> taskResult = getMapByString(result);

Loading…
Cancel
Save