如何使用 Pentaho 将 CSV 文件拆分成组?

How to split a CSV file into groups using Pentaho?

我是 Pentaho 的新手,正在尝试读取 CSV 文件(我已经这样做了)并根据标识符创建数据块。

Eg

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

Eg

 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

我想我找到了答案。

我创建了转换 in this zip,可以像您描述的那样按行转换您的 "csv" 文件,但我不知道您下一步打算做什么,所以也许您可以给我们更多细节。 =)

我会解释我做了什么:

1) First, we grab the row full text with a Text input step

当您查看文本输入步骤的配置时,您会看到我使用了“;”有分隔符,当你的输入文件使用'|'所以我没有用'|'拆分列但将整行加载到一列中。获取该行的全文,仅此而已。

2) Next we apply a regex eval to separate the ID from the rest of our string.

^(\d+)\|(.*)

这意味着:在文本的开头,我希望有一个或多个数字后跟竖线以及之后的任何内容。捕获一列中字符串开头的数字以及管道后的所有内容到另一列。

这给你这个输出:(蓝色是第一个捕获组,红色是第二个)

3) Now what you need is to add a 'sequence' that only goes up if there is a row_id = 1. Which I did in the Mod JS Value with the following code:

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
    }
}

这将为您提供看起来符合您预期的输出:(绿色,group/sequence 完成)

希望对您有所帮助=)