copy问题
- 问题1
表字段个数和copy的文件里面列个数不一样时,用copy导入报错。
比如表t_copy中有5个字段,表t_copy2中有三个字段。目前表t_copy数据已经导出到csv文件,现在想把导出的csv文件导入到表t_copy2中。
(1).表结构和数据
CREATE TABLE t_copy(id number,c1 varchar2(20),d varchar2(20),e varchar2(20),f varchar2(20));
insert into t_copy SELECT x,’c1-‘||x,’d1-‘||x,’e1-‘||x,’f1-‘||x FROM generate_series(1, 10) AS x;
select * from t_copy;
CREATE TABLE t_copy2(id number,d varchar2(20),f varchar2(20));
select * from t_copy2;
(2).表t_copy数据导出
\COPY t_copy TO ‘/hgdata/t_copy.csv’ with DELIMITER ‘|’;
(3).导入数据到t_copy2
\COPY t_copy2 FROM ‘/hgdata/t_copy.csv’ with csv DELIMITER ‘|’
直接导入会报错:
解决方式,增加skiplist参数跳过不需要的行:
\COPY t_copy2 FROM ‘/hgdata/t_copy.csv’ with csv DELIMITER ‘|’ skiplist 2,4;
select * from t_copy2;
- 问题2
表字段类型是number,导入csv中存在””的数据,用copy导入数据时报错。
比如表test_double有两个字段,类型都是number。
(1).表结构和数据
create table test_double(obj_id number PRIMARY key,bbumaxtpower number);
insert into test_double values (1,’’),(2,null);
select * from test_double;
(2).csv内容
cat test_double.csv
(3).导入数据到test_double
\COPY test_double FROM ‘/hgdata/test_double.csv’ with DELIMITER ‘|’ ;
直接导入会报错:
解决方式,增加force_null参数把带引用的空值字符串数据值转换成NULL:
\COPY test_double FROM ‘/hgdata/test_double.csv’ with (format csv,DELIMITER ‘|’,force_null(bbumaxtpower));
select * from test_double;