hdfs外部表导出数据#

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

  • 准备导出的表

  • 定义外部表

  • 导出数据

准备导出的表#

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

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

定义外部表#

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

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

导出数据#

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

1INSERT INTO expense_out select * from myexpenses;

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