如何使用DB2 LOAD命令导入CSV时为指定列填充常量值?
问题描述
现有两个CSV文件,均包含c1、c2、c3、c4四列;已创建一个DB2表,包含a1、a2、a3、a4、a5五列。需要分别将两个CSV文件导入该表,且每次导入时为a1列填充不同的常量值(如my_value1、my_value2)。
CSV文件1内容:
c1,c2,c3,c4 ............ 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4
CSV文件2内容:
c1,c2,c3,c4 ............ 5,6,7,8 5,6,7,8 5,6,7,8 5,6,7,8
期望导入后的表数据:
a1, a2, a3, a4 ,a5 .................. my_value1,1,2,3,4 my_value1,1,2,3,4 my_value1,1,2,3,4 my_value1,1,2,3,4 my_value2,5,6,7,8 my_value2,5,6,7,8 my_value2,5,6,7,8 my_value2,5,6,7,8
尝试了以下命令但无法生效:
load from path\file1 of del insert into table_name(my_value1, c1,c2,c3,c4) load from path\file2 of del insert into table_name(my_value2, c1,c2,c3,c4)
解决方案
DB2的LOAD命令不能直接将常量值写在表的列列表中,需要通过VALUES子句指定常量与CSV列的映射关系。以下是正确的命令写法:
导入第一个CSV文件(a1填充my_value1):
LOAD FROM path\file1 OF DEL INSERT INTO table_name(a1, a2, a3, a4, a5) VALUES('my_value1', ?, ?, ?, ?)
导入第二个CSV文件(a1填充my_value2):
LOAD FROM path\file2 OF DEL INSERT INTO table_name(a1, a2, a3, a4, a5) VALUES('my_value2', ?, ?, ?, ?)
说明
- 命令中的
?是占位符,对应CSV文件中的每一列(顺序与CSV列一致),分别映射到表的a2、a3、a4、a5列。 - 常量值需要用单引号包裹,符合DB2的字符串格式要求。
- 若CSV文件的分隔符不是默认逗号,可添加
MODIFIED BY COLDELx参数(x为实际分隔符),例如分隔符是空格则用MODIFIED BY COLDEL' '。
内容的提问来源于stack exchange,提问作者hitseng
相关产品推荐
相关产品推荐

