这是相当棘手和有趣的,因为 Talend 是基于模式的,所以如果您没有预定义输入/输出模式,可能很难实现您想要的。
这里有一些你可以尝试的东西,有很多组件要使用,我没有设法找到一个组件更少的解决方案。我的解决方案是使用不常见的组件,例如 tNormalize 和 tPivotToColumnsDelimited。有一个缺陷,因为最后你会得到一个额外的列。
1 - tFileInputRaw,因为如果您不知道您的输入架构,只需使用这个读取文件即可。
2 - tConvertType :在这里您可以将Object 转换为String 类型
3 - tNormalize :您必须手动分隔行(使用 \n 作为分隔符)
4 - tMap :添加一个序列 "I"+Numeric.sequence("s1",1,1) ,这将在以后用于识别和重组行。
5 - tNormalize :在这里我对“TAB”分隔符进行规范化,为每个 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 并不是一个非常简单的工具。