kettle设置变量中变量范围的设置说明
ETL设置变量中变量范围的设置说明变量类型的作用域范围“设置变量”插件中的“变量类型”有四个选项对应着四个不同的作用域范围"s"ystem, "r"oot, "g"randparent, "p"arent。变量类型选项作用域作用域范围说明在Java虚拟机中(Java Virtual Machine)S系统级凡是在一个java虚拟机下运行的线程都受其影响。.
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里来实现在根节点范围的变量值覆盖,而外面的环境变量值不会修改。
代码实现可以看这篇文章:
更多推荐
所有评论(0)