Talend:保存变量供以后使用

时间:2016-08-02 18:49:13

标签: etl talend

我正在尝试在电子表格的标题中保存一个值,以便以后用作新的列值。

这是标题中包含值(XYZ)的简化版本:

original report

标头中的值必须用于新列CODE: enter image description here

这是我的设计:

enter image description here

tFilterRow_1用于拒绝A,B,C列中没有值的行。 tJavaRow_1中有一个条件来设置全局变量:

if(String.valueOf(row1.col_a).equals("CODE:")){
  globalMap.putIfAbsent("code", row1.col_b);
}

tMap_1中用于获取全局变量的Var表达式为:

(String)globalMap.get("code")  

Var“代码”映射到列“代码”,但我得到了这个输出:

a1|b1|c1|
a2|b2|c2|
a3|b3|c3|

错过了什么或者有更好的方法来完成这个方案? 提前致谢。

1 个答案:

答案 0 :(得分:1)

简短回答: 我tJavaRow在这种情况下使用input_row或实际的rowN行.4。

更长的答案,我是怎么做的。

我要做的就是让excel在AS-IS中流动。通过使用一些Java技巧,我们可以简单地跳过前几行,然后让其余的流程通过。 所以过滤器+ tjavarow组合可以用tJavaFlex替换。

tJavaFlex我会这样做:

开始:

boolean contentFound = false;

if(input_row.col1 != null && input_row.col1.equalsIgnoreCase("Code:") ) {
   globalMap.put("code",input_row.col2);
}
if(input_row.col1 != null && input_row.col1.equalsIgnoreCase("Column A:") ) {
   contentFound = true;
} else {
   if(false == contentFound) continue;
}

这样你只需跳过前几条记录(即标题),只关心实际数据。