【发布时间】:2021-12-06 18:29:58
【问题描述】:
我在windows 上运行Vertica 的docker 映像。我用这个模式在vertica 创建了一个表(student_id 是primary key)
dbadmin@d1f942c8c1e0(*)=> \d testschema.student;
List of Fields by Tables
Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key
------------+---------+------------+-------------+------+---------+----------+-------------+-------------
testschema | student | student_id | int | 8 | | t | t |
testschema | student | name | varchar(20) | 20 | | f | f |
testschema | student | major | varchar(20) | 20 | | f | f |
(3 rows)
student_id 是主键。我正在使用copy 命令测试从csv 文件加载数据。
首先我使用insert - insert into testschema.student values (1,'Jack','Biology');
然后我在/home/dbadmin/vertica_test 目录下创建了一个csv 文件-
vi student.csv
2,Kate,Sociology
3,Claire,English
4,Jack,Biology
5,Mike,Comp. Sci
然后我运行了这个命令
copy testschema.students from '/home/dbadmin/vertica_test/student.csv' delimiter ',' rejected data as table students_rejected;
我测试了结果
select * from testschema.student - shows 5 rows
select * from students_rejected; - no rows
然后我在/home/dbadmin/vertica_test directory创建另一个带有错误数据的csv文件
vi student_bad.csv
bad_data_type_for_student_id,UnaddedStudent, UnaddedSubject
6,Cassey,Physical Education
我从错误的csv 文件中添加了数据
copy testschema.students from '/home/dbadmin/vertica_test/student.csv' delimiter ',' rejected data as table students_rejected;
然后我测试了输出
select * from testschema.student - shows 6 rows <-- only one row got added. all ok
select * from students_rejected; - shows 1 row <-- bad row's entry is here. all ok
看起来不错
然后我再次添加了错误数据,没有拒绝数据选项
copy testschema.students from '/home/dbadmin/vertica_test/student_bad.csv' delimiter ',' ;
但是现在学生 id 为 6 的条目又被添加了!!
student_id | name | major
------------+--------+--------------------
1 | Jack | Biology
2 | Kate | Sociology
3 | Claire | English
4 | Jack | Biology
5 | Mike | Comp. Sci
6 | Cassey | Physical Education <--
6 | Cassey | Physical Education <--
这不应该被拒绝吗?
【问题讨论】:
标签: vertica