使用COPY命令导入导出数据#

COPY命令可以用来导入和导出数据,COPY命令既可以通过HDFS的URL也可以通过本地文件进行数据的导入和导出。 COPY在导入导出本地文件时,是在master节点的串行操作,只适合少量数据的导入和导出。 COPY在导入导出HDFS的文件时,是在segment上的并行操作,可以用来支持大量数据的导入和导出 下面章节给出一些简单的例子说明如何使用COPY来导入和导出数据。关于NULL值处理,分割符,换行符,转义字符以及编码的处理可以参考格式化输入和输出文件章节。

  • 使用COPY导入本地数据

  • 使用COPY导出数据到本地

  • 使用COPY导入HDFS数据文件

  • 使用COPY导出数据到HDFS目录

  • 使用Error table

使用COPY导入本地数据#

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

 1# 下面的命令把文件/data1/load-files/expenses.out中的内容导入到myexpenses表中
 2
 3COPY myexpenses FROM '/data1/load-files/expense_m.out'
 4
 5# 下面的命令把STDIN中的数据导入到myexpenses表
 6
 7etl=# COPY myexpenses FROM STDIN;
 8Enter data to be copied followed by a newline.
 9End with a backslash and a period on a line by itself.
10>> john      2017-01-20      100     travel  nothing
11>> \.

使用COPY导出数据到本地#

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

 1# 下面命令拷贝一个表的部分数据到一个文件中
 2
 3COPY (SELECT * FROM myexpenses WHERE name LIKE 'm%')
 4TO '/data1/load-files/expense_m.out';
 5
 6
 7# 下面命令拷贝一个表的所有数据到一个文件中
 8
 9COPY myexpenses TO '/data1/load-files/expense_m.out';
10
11# 下面命令拷贝一个表到控制台
12
13COPY myexpenses TO STDOUT;

使用COPY导入HDFS上的数据文件#

使用COPY可以从HDFS的数据文件或者目录导入数据到一个表中。

 1# 下面的命令把HDFS上的文件hdfs://oushudb/data1/load-files/expenses.out中的内容导入到myexpenses表中
 2
 3COPY myexpenses FROM 'hdfs://oushudb/data1/load-files/expense_m.out'
 4
 5# 下面的命令把整个HDFS上的目录中的所有文件hdfs://oushudb/data1/load-files/中的所有文件内容导入到myexpenses表中
 6
 7COPY myexpenses FROM 'hdfs://oushudb/data1/load-files'
 8
 9# 下面的命令通过“*”通配符把HDFS上的目录中的多个文件hdfs://oushudb/data1/load-files/e*.out中的所有文件内容导入到myexpenses表中
10
11COPY myexpenses FROM 'hdfs://oushudb/data1/load-files/e*.out'
12
13# COPY可以支持将HDFS上的ORC文件直接导入表中,下面的命令将hdfs://oushudb/data1/load-files/orc_files下的ORC格式文件导入到myexpenses表中
14
15COPY myexpenses FROM 'hdfs://oushudb/data1/load-files/orc_files' ORC

使用COPY导出数据到HDFS数据目录#

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

 1# 下面命令拷贝一个表的部分数据到一个HDFS文件目录中
 2
 3COPY (SELECT * FROM myexpenses WHERE name LIKE 'm%')
 4TO 'hdfs://oushudb/data1/load-files';
 5
 6
 7# 下面命令拷贝一个表的所有数据到一个HDFS文件目录中
 8
 9COPY myexpenses TO 'hdfs://oushudb/data1/load-files/';
10
11# 下面命令以ORC格式拷贝一个表的部分数据到一个HDFS文件目录中
12
13COPY (SELECT * FROM myexpenses WHERE name LIKE 'm%')
14TO 'hdfs://oushudb/data1/load-files' ORC;
15
16# 下面命令以ORC格式拷贝一个表的所有数据到一个HDFS文件目录中
17
18COPY myexpenses TO 'hdfs://oushudb/data1/load-files/orc_files' ORC

使用Error table#

COPY命令在导入本地数据也可以使用error table来隔离出错的行。

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