使用COPY命令导入导出数据

COPY命令可以用来导入和导出数据,因为COPY在master节点是串行操作,只适合少量数据的导入和导出。下面章节给出一些简单的例子说明如何使用COPY来导入和导出数据。关于NULL值处理,分割符,换行符,转义字符以及编码的处理可以参考格式化输入和输出文件章节。

  • 使用COPY导入数据
  • 使用COPY导出数据
  • 使用Error table

使用COPY导入数据

使用COPY可以从文件或者标准控制台导入数据到一个表中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 下面的命令把文件/data1/load-files/expenses.out中的内容导入到myexpenses表中

COPY myexpenses FROM '/data1/load-files/expense_m.out'

# 下面的命令把STDIN中的数据导入到myexpenses表

etl=# COPY myexpenses FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> john      2017-01-20      100     travel  nothing
>> \.

使用COPY导出数据

COPY命令可以导出一个表到一个文件中或者标准输出控制台中。例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 下面命令拷贝一个表的部分数据到一个文件中

COPY (SELECT * FROM myexpenses WHERE name LIKE 'm%')
TO '/data1/load-files/expense_m.out';


# 下面命令拷贝一个表的所有数据到一个文件中

COPY myexpenses TO '/data1/load-files/expense_m.out';

# 下面命令拷贝一个表到控制台

COPY myexpenses TO STDOUT;

使用Error table

COPY命令也可以使用error table来隔离出错的行。

1
2
3
4
COPY myexpenses FROM '/data1/load-files/expense1'
WITH DELIMITER '|'
LOG ERRORS INTO exp_errtable
SEGMENT REJECT LIMIT 10 ROWS;