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如下: .. code-block:: html :linenos: 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'); .. code-block:: html :linenos: 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 .. code-block:: html :linenos: CREATE 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外部表。 .. code-block:: html :linenos: INSERT 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