gpfdist外部表导出数据#

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

  • 启动gpfdist文件服务器

  • 准备导出的表

  • 定义外部表

  • 导出数据

启动gpfdist文件服务器#

在本例中,我们在一个节点上启动了两个gpfdist实例,分别使用/data1/load-files和/data2/load-files目录来存放导出的文件。两个gpfdist实例分别侦听在8081和8082端口。日志分别存放在/home/hawq/log1和/home/hawq/log2中。

gpfdist就像是一个文件服务器。其中-d选项指定的是目录是该文件服务器的根目录。

gpfdist -d /data1/load-files -p 8081 -l /data1/log1
gpfdist -d /data2/load-files -p 8082 -l /data2/log2

准备导出的表

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

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');
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外部表。其中需要把etlhost-1替换为gpfdist所在机器的主机名。本机的可以使用localhost。

这里我们会把数据导出到两个文件中去,一个是sales1.out,一个是sales2.out

CREATE WRITABLE EXTERNAL TABLE expense_out (LIKE myexpenses)
LOCATION ('gpfdist://etlhost-1:8081/sales1.out', 'gpfdist://etlhost-1:8082/sales2.out') 
FORMAT 'TEXT' ( DELIMITER '|' NULL ' ') 
DISTRIBUTED BY (name);

导出数据#

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

INSERT INTO expense_out select * from myexpenses;

现在你可以查看/data1/load-files和/data2/load-files目录下已经产生了相应文件:

$ ls -al /data2/load-files/
total 8
drwxr-xr-x  3 oushu  wheel  102 Jan  6 14:26 .
drwxr-xr-x  4 oushu  wheel  136 Jan  6 10:31 ..
-rw-------  1 oushu  wheel   65 Jan  6 14:26 sales2.out
$ ls -al /data1/load-files/
total 8
drwxr-xr-x  3 oushu  wheel  102 Jan  6 14:26 .
drwxr-xr-x  4 oushu  wheel  136 Jan  6 14:19 ..
-rw-------  1 oushu  wheel   72 Jan  6 14:26 sales1.out