如何在Talend中合并两个不同文件的多列数据?
Talend实现多文件列合并(保留共同列与独有列)
需求说明
现有两个文本文件:
第一个文件数据:
USERNAME | AGE | GENDER | CHILDREN Joe | 23 | male | 2 Annie | 45 | female | 5 | | |
第二个文件数据:
USERNAME | AGE | Jonathan | 33 | Mike | 41 |
需要合并两个文件,共同列(USERNAME、AGE)合并为一列,同时保留第一个文件独有的GENDER、CHILDREN列,第二个文件对应的独有列留空,最终输出:
USERNAME | AGE | GENDER | CHILDREN Joe | 23 | male | 2 Annie | 45 | female | 5 Jonathan | 33 | | Mike | 41 | |
实现步骤
1. 配置文件输入组件
拖入两个tFileInputDelimited组件到工作区,分别对应两个文件:
第一个文件组件(命名为
tFileInputDelimited_1):- 在「Basic settings」中选择目标文件,设置字段分隔符为
|,勾选「Trim all fields」去除字段前后空格。 - 字段列表定义为:
USERNAME(String类型)、AGE(Integer类型)、GENDER(String类型)、CHILDREN(Integer类型)。 - 添加行过滤:在「Row Filter」中输入
!(USERNAME == null || USERNAME.trim().isEmpty()),过滤掉文件末尾的空行。
- 在「Basic settings」中选择目标文件,设置字段分隔符为
第二个文件组件(命名为
tFileInputDelimited_2):- 同样选择目标文件,字段分隔符设为
|,勾选「Trim all fields」。 - 先定义原有字段:
USERNAME(String类型)、AGE(Integer类型)。 - 添加两个虚拟字段:
GENDER(String类型,默认值设为null)、CHILDREN(Integer类型,默认值设为null),让输出列结构与第一个文件完全一致。 - 同样添加行过滤
!(USERNAME == null || USERNAME.trim().isEmpty()),过滤空行。
- 同样选择目标文件,字段分隔符设为
2. 合并两个数据集
拖入tUnionAll组件,将两个tFileInputDelimited组件的「Main」输出分别连接到tUnionAll的两个输入端口。
3. 输出结果文件
拖入tFileOutputDelimited组件,将tUnionAll的输出连接到该组件:
- 在「Basic settings」中设置输出文件路径。
- 字段分隔符设为
|,勾选「Trim all fields」,同时可以设置表头(勾选「Include header」)。
4. 运行作业
配置完成后运行作业,即可得到符合要求的合并结果。
补充说明
如果不需要保留表头,可在tFileOutputDelimited中取消「Include header」的勾选;若字段类型有调整需求,可在tFileInputDelimited或tMap中修改字段类型适配实际数据。
内容的提问来源于stack exchange,提问作者ELel
相关产品推荐
相关产品推荐

