我是Pentaho的新手,我正在尝试读取CSV文件(我已经做过)并根据标识符创建数据块。
例如
1|A|B|C
2|D|E|F
8|G|H|I|J|K
4|L|M
1|N|O|P
4|Q|R|S|T
5|U|V|W
我需要拆分并将其分组:
(每个块在第一列等于'1'时开始)
阻止a)
1|A|B|C
2|D|E|F
8|G|H|I|J|K
4|L|M
阻止b)
1|N|O|P
4|Q|R|S|T
5|U|V|W
例如
a |1|A|B|C
a |2|D|E|F
a |8|G|H|I|J|K
a |4|L|M
b |1|N|O|P
b |4|Q|R|S|T
b |5|U|V|W
如何使用Penatho实现这一目标?感谢。
我发现了一个类似的问题,但答案并没有真正帮助我 Pentaho Kettle split CSV into multiple records
答案 0 :(得分:4)
我想我得到了答案。
我创建了转化in this zip,可以改变你的" csv"文件行几乎与你描述的一样,但我不知道你打算下一步做什么,所以也许你可以给我们更多细节。 =)
我将解释我的所作所为:
1)首先,我们使用文本输入步骤
获取行全文
当您查看文本输入步骤的配置时,您会看到我使用了&#39 ;;'当你的输入文件使用' |'时有分隔符。所以我没有用' |'分割列。但是将整行加载到一列中。抓住行的全文,没有别的。
2)接下来,我们应用正则表达式eval将ID与其余字符串分开。
^(\d+)\|(.*)
这意味着:在文本的开头,我希望一个或多个数字后跟一个管道,之后的任何内容。捕获一列中字符串开头的数字以及管道之后的所有内容到另一列。
3)现在你需要的是添加一个'序列'如果有一个row_id = 1,那只会上升。我在Mod JS值中使用以下代码执行了此操作:
var sequence
//if it's the first row, set sequence to 1
if(sequence == null){
sequence = 1;
}else{
//if it's not the first row, check if the row_id is equal to 1 (string)
if(row_id == '1'){
// increment the sequence
sequence++;
}else{
//nothing
}
}
这会给你这个看起来像你期望的输出:(绿色,组/序列完成)
希望有帮助=)