Talend:合并具有动态列的CSV文件

时间:2014-09-07 04:59:51

标签: file talend

我想合并两个CSV文件。我面临的问题是两个CSV文件中的一个具有动态列。

e.g。

第一个CSV文件有两列。 A和G.列G有逗号分隔值。

A | G       |<-Column Names
--|---------|
A1| G1,G2,G3| <-Row
A2| G2,G5,G6|<-Row

MainCSv

第二个CSV文件包含动态列。但它将有A列(uid)。 e.g。

A | C1    |C2       |Othercolumns|<-Column Names
--|-------|---------|------------|
A1|C1Value|C2Value  |            |<-Row
A2|C1Value| C2Value |            |<-Row

Lookup CSV

我想合并这两个文件所以输出将是:

A |G          | C1    |C2       |Othercolumns|<-Column Names
--|-----------|-------|---------|------------|
A1| G1,G2,G3  |C1Value|C2Value  |            |<-Row
A2| G2,G5,G6  |C1Value| C2Value |            |<-Row

enter image description here

我无法使用tmap,因为第二个文件有动态列。

请告诉我如何实现这一目标。

2 个答案:

答案 0 :(得分:0)

由于您的A列是静态的,您仍然可以使用tMap来执行此操作。

一个简单的工作可能如下所示:

Job layout

首先,将第二个CSV的架构设置为2列:A(字符串类型)和RemainingCols(动态类型)。

CSV2 schema

你的第一个CSV应该有这样的架构:

CSV1 schema

然后像往常一样用tMap加入你的两个数据源:

tMap configuration to join the 2 schemas

答案 1 :(得分:0)

如果您使用的是Talend Open Studio,那么以下解决方案可能会很好:

  • 使用tFileInputFullRow组件读取文件。
  • 使用tJavaRow将inputrows拆分为2列:A1 / Rest
  • 将此行运行到tMap中,进行连接。
  • 使用tJavaRow为输出创建行。