hdfs外部表导出数据

本节通过一个简单的例子来说明如何使用hdfs外部表来导出数据。关于NULL值处理,分割符,换行符,转义字符以及编码的处理可以参考CREATE EXTERNAL TABLE的详细语法。

  • 准备导出的表
  • 定义外部表
  • 导出数据

准备导出的表

假设我们有一个内部表expenses如下:

1
2
3
CREATE TABLE myexpenses(name text, date date, amount float4, category text, desc1 text);
INSERT INTO myexpenses VALUES('john','2017-01-20',100.00,'travel','nothing'),('tom','2016-12-01',300,'taxi','nothing');
INSERT INTO myexpenses VALUES('marry','2017-01-21',1000.00,'travel','nothing'),('kurt','2016-12-02',800,'taxi','nothing');
1
2
3
4
5
6
7
8
etl=# select * from myexpenses;
 name  |    date    | amount | category |  desc1
-------+------------+--------+----------+---------
 john  | 2017-01-20 |    100 | travel   | nothing
 tom   | 2016-12-01 |    300 | taxi     | nothing
 marry | 2017-01-21 |   1000 | travel   | nothing
 kurt  | 2016-12-02 |    800 | taxi     | nothing
(4 rows)

定义外部表

可以使用下面的命令创建WRITABLE外部表,指定的location中如果路径名不存在,Oushu Database会自动为客户创建该目录。其中’nnhost’和’nnport’代表使用的Hadoop HDFS的namenode 主机地址和端口号:

1
2
3
CREATE WRITABLE EXTERNAL TABLE expense_out (LIKE myexpenses)
LOCATION ('hdfs://nnhost:nnport/expense')
FORMAT 'csv' ( DELIMITER '|' NULL ' ');

导出数据

下面这条语句可以很简单的导出数据到expense_out外部表。

1
INSERT INTO expense_out select * from myexpenses;

现在你可以查看/expense目录下已经产生了相应文件。