关于COPY导入数据的问题(一)
COPY 的语法:
COPY table [(column [, ...])] FROM {'file' | PROGRAM 'command' | STDIN}
[ [WITH]
[ON SEGMENT]
[OIDS]
[HEADER]
[DELIMITER [ AS ] 'delimiter']
[NULL [ AS ] 'null string']
[ESCAPE [ AS ] 'escape' | 'OFF']
[NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
[CSV [QUOTE [ AS ] 'quote']
[FORCE NOT NULL column [, ...]]
[FILL MISSING FIELDS]
[[LOG ERRORS [INTO error_table] [KEEP]
SEGMENT REJECT LIMIT count [ROWS | PERCENT] ]
其中关于 STDIN 的语法使用如下。
- 创建测试用表
test
create table test(id int,name varchar(100));
- 编辑测试SQL脚本
test.sql
:copy test(id,name) from stdin WITH DELIMITER AS ' '; 1 a 2 b \.
- 在gpadmin用户下面,脚本坐在目录中执行插入
psql -d hashdata -f test.sql
问题解析
通常情况下,我们从 TXT,CSV 文件,使用 COPY 进行数据导入的时候,可能会忽略 DELIMITER
参数。
在 HashData官方文档 中有如下说明:
delimiter
单个 ASCII 字符,用于分隔文件每行中的列。文本模式下默认是制表符,CSV模式下默认是逗号。
问题结论
在使用COPY进行数据导入的时候需要注意导入数据的文件类型。再判断是否能够使用默认的 数据分隔符号,还是使用 DELIMITER
参数显式的指定相应的分隔符。