使用 Talend 转置数据
Transpose data using Talend
我有这样的数据:
我需要使用 Talend 将这些数据转换成这样的东西:
不胜感激。
您可以使用 Talend 的 tPivotToColumnsDelimited 组件来实现这一点。您很可能需要在数据中增加一列来表示字段名称。
喜欢"Identifier, field name, value "
然后您可以使用此组件来旋转数据并写入一个文件作为输出。如果您需要进一步处理数据,请使用 tFileInoutDelimited 读取生成的文件。
dbh的建议应该可以,但我没试过
但是,我有另一种解决方案,它不需要更改输入格式并且实施起来也不太复杂。实际上,该作业只有 2 个转换组件(tDenormalize 和 tMap)。
作业如下所示:
解释:
- 您的输入是从 CSV 文件中读取的(可以是数据库或任何其他类型的输入)
- tDenormalize 组件将根据 id 列(第 1 列)上的值对您的列值(第 2 列)进行非规范化,使用特定分隔符(在我的例子中为“;”)分隔字段,结果如 2 行所示。
- tMap :通过使用 java 的 String.split() 方法将聚合列拆分为多个列,并将结果数组分散到多个列中。 tMap 应该像这样:
由于 Talend 不接受存储数组对象,请确保以对象格式存储拆分后的字符串。然后,将该对象转换为地图右侧的数组。
这种方法应该会给你预期的结果。
重要:
- tNormalize 可能会打乱行,这意味着对于更大的输入,您可能会遇到未排序的输出。确保在需要时对其进行排序或改用 tDenormalizeSortedRow。
- tNormalize 类似于聚合组件,这意味着它会在处理之前扫描整个输入,这会导致特别大的输入(数千万条记录)可能出现性能问题。
- 您的输入可能有误(您有 5 个条目的 ID 为 1,还有 6 个条目的 ID 为 2)。预计有 6 列,这意味着每个 ID 应始终有 6 行。如果没有,那么您应该实施 dbh 的解决方案,并且您可能必须添加一个带有键的列。
我有这样的数据:
我需要使用 Talend 将这些数据转换成这样的东西:
不胜感激。
您可以使用 Talend 的 tPivotToColumnsDelimited 组件来实现这一点。您很可能需要在数据中增加一列来表示字段名称。
喜欢"Identifier, field name, value "
然后您可以使用此组件来旋转数据并写入一个文件作为输出。如果您需要进一步处理数据,请使用 tFileInoutDelimited 读取生成的文件。
dbh的建议应该可以,但我没试过
但是,我有另一种解决方案,它不需要更改输入格式并且实施起来也不太复杂。实际上,该作业只有 2 个转换组件(tDenormalize 和 tMap)。
作业如下所示:
解释:
- 您的输入是从 CSV 文件中读取的(可以是数据库或任何其他类型的输入)
- tDenormalize 组件将根据 id 列(第 1 列)上的值对您的列值(第 2 列)进行非规范化,使用特定分隔符(在我的例子中为“;”)分隔字段,结果如 2 行所示。
- tMap :通过使用 java 的 String.split() 方法将聚合列拆分为多个列,并将结果数组分散到多个列中。 tMap 应该像这样:
由于 Talend 不接受存储数组对象,请确保以对象格式存储拆分后的字符串。然后,将该对象转换为地图右侧的数组。
这种方法应该会给你预期的结果。
重要:
- tNormalize 可能会打乱行,这意味着对于更大的输入,您可能会遇到未排序的输出。确保在需要时对其进行排序或改用 tDenormalizeSortedRow。
- tNormalize 类似于聚合组件,这意味着它会在处理之前扫描整个输入,这会导致特别大的输入(数千万条记录)可能出现性能问题。
- 您的输入可能有误(您有 5 个条目的 ID 为 1,还有 6 个条目的 ID 为 2)。预计有 6 列,这意味着每个 ID 应始终有 6 行。如果没有,那么您应该实施 dbh 的解决方案,并且您可能必须添加一个带有键的列。