我想合并两个CSV文件。我面临的问题是两个CSV文件中的一个具有动态列。
e.g。
第一个CSV文件有两列。 A和G.列G有逗号分隔值。
A | G |<-Column Names
--|---------|
A1| G1,G2,G3| <-Row
A2| G2,G5,G6|<-Row
第二个CSV文件包含动态列。但它将有A列(uid)。 e.g。
A | C1 |C2 |Othercolumns|<-Column Names
--|-------|---------|------------|
A1|C1Value|C2Value | |<-Row
A2|C1Value| C2Value | |<-Row
我想合并这两个文件所以输出将是:
A |G | C1 |C2 |Othercolumns|<-Column Names
--|-----------|-------|---------|------------|
A1| G1,G2,G3 |C1Value|C2Value | |<-Row
A2| G2,G5,G6 |C1Value| C2Value | |<-Row
这是工作。
我没有检查tfileoutputdelimited_1中的include header选项。 这会正确合并csv文件,但不会带来第二个CSV文件的列信息(一个带有动态列)。输出如下所示。
A |G | | | |
--|-----------|-------|---------|------------|
A1| G1,G2,G3 |C1Value|C2Value | |<-Row
A2| G2,G5,G6 |C1Value| C2Value | |<-Row
要获取列名称,当我选中&#34; include Header&#34;输出文件中的选项我得到以下异常。
java.lang.NullPointerException
at routines.system.DynamicUtils.writeHeaderToDelimitedFile(DynamicUtils.java:72)
at content.csvmergetest_0_1.CSVMergeTest.tFileInputDelimited_2Process(CSVMergeTest.java:2696)
at content.csvmergetest_0_1.CSVMergeTest.runJobInTOS(CSVMergeTest.java:3109)
at content.csvmergetest_0_1.CSVMergeTest.main(CSVMergeTest.java:2975)
如下所示,在这种情况下,只从Tfileinputdelimited_2获取一行。我猜这行是标题列,这就是nullpointer异常的原因。
为什么会这样?我如何获得标题? 请让我知道如何实现这一目标。
答案 0 :(得分:0)
使用“othercolumns”读入文件,作为Dynamic类型的1列。
在加入tMap之前,您需要从中提取A列:
然后注意在输出模式中只有一个动态类型,因为talend不能处理两个。
包含一个标题行和1个“othercolumns”colum Z的结果文件如下所示:
A;G;C1;C2;Z
A1;G1,G2,G3;C1Value;C2Value;Z1
A2;G2,G5,G6;C1Value;C2Value;Z2