使用Talend转置数据

时间:2016-04-07 05:07:19

标签: talend

我有这样的数据:

enter image description here

我需要使用Talend将这些数据转换成这样的东西:

enter image description here

非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

dbh的建议应该确实有效,但我没有尝试过。

但是,我有另一种解决方案,它不需要改变输入格式,也不会太复杂而无法实现。实际上,这个工作只有2个转换组件(tDenormalize和tMap)。

这项工作如下: enter image description here

解释

  • 您的输入是从CSV文件中读取的(可以是数据库或任何其他类型的输入)
  • tDenormalize组件将根据id列(第1列)上的值对列值进行非规范化(第2列),使用特定分隔符(在我的情况下为“;”)分隔字段,结果如2行所示。
  • tMap:使用java的String.split()方法将聚合列拆分为多个列,并将生成的数组分散到多个列中。 tMap应该是这样的: enter image description here

由于Talend不接受存储Array对象,因此请确保以对象格式存储拆分的String。然后,将该对象转换为Map右侧的Array。

这种方法应该能给你预期的结果。

重要

  • tNormalize可能会对行进行随机播放,这意味着对于更大的输入,您可能会遇到未排序的输出。确保在需要时对其进行排序或使用tDenormalizeSortedRow。
  • tNormalize类似于聚合组件,意味着它在处理之前扫描整个输入,这导致特别大的输入(数千万条记录)可能出现性能问题。
  • 您输入的内容可能有误(您有5个条目,其中1为ID,6个条目为2,ID为id)。预计6列意味着每个ID应始终有6行。如果没有,那么你应该实现dbh的解决方案,你可能必须添加一个带有密钥的列。

答案 1 :(得分:1)

您可以使用Talend的tPivotToColumnsDelimited组件来实现此目的。您很可能需要在数据中添加一列来表示字段名称。

喜欢"标识符,字段名称,值"

然后,您可以使用此组件来旋转数据并将文件写为输出。如果需要进一步处理数据,请使用tFileInoutDelimited读取生成的文件。

请参阅文档和示例 https://help.talend.com/display/TalendOpenStudioComponentsReferenceGuide521EN/13.43+tPivotToColumnsDelimited