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如下:
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外部表。其中需要把etlhost-1替换为gpfdist所在机器的主机名。本机的可以使用localhost。
这里我们会把数据导出到两个文件中去,一个是sales1.out,一个是sales2.out
1CREATE EXTERNAL TABLE expense_out (LIKE myexpenses)
2LOCATION ('gpfdist://etlhost-1:8081/sales1.out', 'gpfdist://etlhost-1:8082/sales2.out')
3FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
4DISTRIBUTED BY (name);
导出数据#
下面这条语句可以很简单的导出数据到expense_out外部表。
1INSERT INTO expense_out select * from myexpenses;
现在你可以查看/data1/load-files和/data2/load-files目录下已经产生了相应文件:
changlei:docs ChangLei$ ls -al /data2/load-files/
total 8
drwxr-xr-x 3 ChangLei wheel 102 Jan 6 14:26 .
drwxr-xr-x 4 ChangLei wheel 136 Jan 6 10:31 ..
-rw------- 1 ChangLei wheel 65 Jan 6 14:26 sales2.out
changlei:docs ChangLei$ ls -al /data1/load-files/
total 8
drwxr-xr-x 3 ChangLei wheel 102 Jan 6 14:26 .
drwxr-xr-x 4 ChangLei wheel 136 Jan 6 14:19 ..
-rw------- 1 ChangLei wheel 72 Jan 6 14:26 sales1.out