多语言展示
当前在线:1432今日阅读:84今日分享:32

解决kettle中一个变量的值随输入数据变化的问题

遇到这样一个问题:从EXCEL中读取数据,其中A列数据,其中包含一些为空的字段,想要将A这列数据进行处理,处理之后的原来为空数据的被上一条有值得数据替换,得到如下效果:AA列为原始数据,A为处理后的数据。A                                     AA1                                     11                                     112                                     21                                     113                                     34                                     445                                     5
工具/原料

kettle4.3版本以上

问题分析

上述问题就是解决在某种条件下将输入处理的数据内进行处理,将输入的某一条数据的值处理后处理给另一条数据。我们可在这个值传递过程中设置一个全局变量,临时将数据的值存在里面(输入的值为非空时),当满足某个条件(读入的数据为空)时将变量的值赋给这个数据。

问题解决思路

针对上述问题,解决思路是,创建一个变量X,当A不为空时,读取数据时每次都将A列的值赋给X,将A的值赋给AA;当遇到A列数据为空时,将变量X中的值赋给AA。

创建kettle模型
1

使用Excel输入将Excel表数据读入进来。kettle作为一个数据加载、转换和清洗工具,支持在其中引入javascript脚本,我们可以在javascript中完成值到变量及变量到值得变换。最后使用Excel输入将处理结果输出即可。构建的模型如下:

2

javascript中代码分析:var AA; //定义新增的输出字段,处理后的A字段的值都存在AA字段中if (A==null){  AA=getVariable('X','');  //判断如果A字段的值为空,则将变量X的值赋给AA } else{ setVariable('X',A,'r');   //如果A字段值不为空,则将A字段的值赋给变量X AA=A;    //Ab不为空时还需要将A字段的值赋给AA}

注意事项

使用这种思路解决字段内传值问题时,需要注意setVariable(var,var,'r')设置的变量值在当前JavaScript不生效,但在当前转换中不生效,不能被同一个转换中的其他组件引用。

推荐信息