gpfdist外部表导出数据
本页目录
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