首页 > 解决方案 > Talend:相当于logstash“键值”过滤器

问题描述

我正在发现 Talend Open Source Data Integrator,我想将我的数据文件转换为 csv 文件。

我的数据是一些关键值数据集,例如这个例子:

A=0 B=3 C=4
A=2 C=4
A=2 B=4
A= B=3 C=1

我想将其转换为像这样的 CSV:

A,B,C
0,3,4
2,,4
2,4,

使用 Logstash,我使用了“键值”过滤器,它能够通过几行代码完成这项工作。但对于 Talend,我没有发现类似的转变。我尝试了“分隔符文件”作业和其他一些作业但没有成功。

标签: talend

解决方案


这是相当棘手和有趣的,因为 Talend 是基于模式的,所以如果您没有预定义输入/输出模式,则可能很难实现您想要的。

这是您可以尝试的东西,有很多组件要使用,我没有设法找到组件更少的解决方案。我的解决方案是使用不寻常的组件,例如tNormalizetPivotToColumnsDelimited。有一个缺陷,因为最后你会得到一个额外的列。

在此处输入图像描述

1 - tFileInputRaw,因为如果你不知道你的输入模式,只需阅读这个文件。

2 - tConvertType:在这里您可以转换ObjectString类型

3 - tNormalize:您必须手动分隔行(\n用作分隔符)

4 - tMap:添加一个序列"I"+Numeric.sequence("s1",1,1),这将在以后用于识别和重新组合行。

5 - : 在这里我对 'TAB' 分隔符进行归一化,为每一对tNormalize获取一行key=value

6 - tMap:你必须在"="标志上分开。

在此处输入图像描述

在这一步,您将获得如下输出:

|seq|key|value|
|=--+---+----=|
|I1 |A  |1    |
|I1 |B  |2    |
|I1 |C  |3    |
|I2 |A  |2    |
|I2 |C  |4    |
|I3 |A  |2    |
|I3 |B  |4    |
'---+---+-----'

其中 seq 是行号。

7 - 最后,使用 tPivotToColumnDelimited,您将获得结果。不幸的是,您将拥有额外的“ID”列,因为组件 tPivot 提供的输出模式不可编辑。(实际上,该组件正在创建模式,这在 talend 组件中是非常不寻常的)。使用 ID 列作为重组列。

在此处输入图像描述

希望这会有所帮助,如果您有动态输入/输出模式,Talend 并不是一个非常简单的工具。


推荐阅读