使用Talend转置数据
我有这样的数据: 我需要使用Talend将这些数据转换成如下内容:使用Talend转置数据,talend,Talend,我有这样的数据: 我需要使用Talend将这些数据转换成如下内容: 非常感谢您的帮助。您可以使用Talend的tPivotToColumnsDelimited组件来实现这一点。您很可能需要在数据中添加一列来表示字段名 比如“标识符、字段名、值” 然后,您可以使用该组件来透视数据并将文件作为输出写入。如果需要进一步处理数据,请使用tFileInoutDelimited读取结果文件 请参阅文档和上的示例 dbh的建议确实有效,但我没有尝试 然而,我有另一个解决方案,它不需要更改输入格式,而且实现
非常感谢您的帮助。您可以使用Talend的tPivotToColumnsDelimited组件来实现这一点。您很可能需要在数据中添加一列来表示字段名 比如“标识符、字段名、值” 然后,您可以使用该组件来透视数据并将文件作为输出写入。如果需要进一步处理数据,请使用tFileInoutDelimited读取结果文件 请参阅文档和上的示例
dbh的建议确实有效,但我没有尝试 然而,我有另一个解决方案,它不需要更改输入格式,而且实现起来也不太复杂。实际上,该作业只有两个转换组件(tDenormalize和tMap) 该作业如下所示: 说明:
- 您的输入是从CSV文件读取的(可以是数据库或任何其他类型的输入)
- tDenormalize组件将根据id列(第1列)上的值对列值(第2列)进行反规范化,并使用特定的分隔符(“;”)分隔字段,结果显示在2行中
- tMap:使用java的String.split()方法将聚合列拆分为多列,并将结果数组分散到多列中。tMap应该是这样的:
- tNormalize可能会将行洗牌,这意味着对于较大的输入,可能会遇到未排序的输出。如果需要,请确保对其进行排序,或者改用TDenormalizeSortDrow
- tNormalize类似于聚合组件,这意味着它在处理之前扫描整个输入,这会导致特别大的输入(数千万条记录)可能出现性能问题
- 您的输入可能有误(您有5个条目的id为1,6个条目的id为2)。需要6列,这意味着每个id应该始终有6行。如果没有,则应该实现dbh的解决方案,并且可能需要添加一个带有键的列