kettle设置变量中变量范围的设置说明

变量类型的作用域范围

“设置变量”插件中的“变量类型”有四个选项

对应着四个不同的作用域范围"s"ystem, "r"oot, "g"randparent, "p"arent。

变量类型选项

作用域

作用域范围说明

在Java虚拟机中(Java Virtual Machine)

S系统级

凡是在一个java虚拟机下运行的线程都受其影响。

在根节点中(the root job)

R级

凡是在根作业下运行的都是生效的。

在父节点中(grand-parent job)

G级

在当前作业的父作业下是生效的。

在当前节点中(parent job)

P级

在当前作业下是生效的。

变量范围上 s > r > g > p, 变量范围重叠时取值的参考变量范围示意图。

变量范围示意图:

kettle如何实现同一个变量在不同的范围有不同的值呢?

简单来说就是在每个范围对象都有个Map保存着变量的值, 所以可以继承上一级范围的Map中的变量值;如果自己有设置变量值的话只设置在自己的Map中,不会去修改父节点Map中的值,这样就实现了会在当前范围Map内覆盖掉同名变量的值,而不会影响上级节点的变量。

比如jvm虚拟里设置了个环境变量,如果流程会把环境变量直接复制到根节点的变量Map里了,如果根节点范围有指定值,那就再把这个值覆盖到根节点的变量Map里来实现在根节点范围的变量值覆盖,而外面的环境变量值不会修改。

代码实现可以看这篇文章:

kettle的变量空间接口VariableSpace实现与委托模式_shy_snow的专栏-CSDN博客

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐