db2 使用指定的列值加载csv文件

ezykj2lf  于 2023-02-22  发布在  DB2
关注(0)|答案(1)|浏览(148)

我有2个csv文件,包含4列(c1,c2,c3,c4),并创建了一个包含5列(a1,a2,a3,a4,a5)的表。现在我想将这两个文件分别加载到表中,以便每次都能有一个常量值进入表的a1列。
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

我尝试了这个方法,但显然不起作用,我从IBM站点阅读了加载文档,但我什么也找不到。

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)
ttp71kqs

ttp71kqs1#

你在评论中已经得到了一些很好的建议,所以这只是另一种方法:

db2 "create table target(a1 varchar(20) not null, a2 int, a3 int, a4 int, a5 int)"
db2 "alter table target alter column a1 set default 'my_value1'"
db2 "load from ./f1.csv of del insert into target (a2,a3,a4,a5)"
db2 "alter table target alter column a1 set default 'my_value2'"
db2 "load from ./f2.csv of del insert into target (a2,a3,a4,a5)"
db2 "alter table target alter column a1 drop default"
db2 "select * from target"

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

  8 record(s) selected.

您还可以查看INGEST

-- create restart table
CALL SYSPROC.SYSINSTALLOBJECTS('INGEST', 'C', NULL, NULL);

INGEST FROM FILE f1.csv      
    FORMAT DELIMITED (        
        $a2  INT EXTERNAL,
        $a3  INT EXTERNAL,
        $a4  INT EXTERNAL,
        $a5  INT EXTERNAL
    )     
    INSERT INTO target (a1,a2,a3,a4,a5)
    VALUES ('my_value1',$a2,$a3,$a4,$a5);

据我所知,它几乎和加载一样快,但灵活得多。有一个比较在:
https://www.oreilly.com/library/view/ibm-db2-111/9781788626910/15f1d83a-dc08-432c-b91b-f48fba48756d.xhtml

相关问题