7.0. 方式
在gp中提供了几种方式用于加载和卸载数据:external tables、gpload、copy等等,这几种方式没有优劣之分,只是在不同场景下使用不同的技术而已。
7.1. 外部表
本文将首先测试使用外部表的方式进行加载和卸载数据。
外部表-external tables,分为只读readable和只写writable两种类别,而每种又可以分为常规regular和web两种类型。在外部表可以并行的查询、关联或者排序等等,视图也是可以基于外部表创建的,只是只读外部表只能select,只写外部表只能insert。
只读的常规regular和web外部表的区别是前者可以重读而后者无法重读。
和oracle当中的外部表类似,但是比oracle提供了更多中的协议方式,oracle当中只有平面文件file这种协议,而gp中提供了以下几种连接协议方式供外部表使用:gpfdist、gpfdists、file、gphdfs,gpfdists只是gpfdist的加密升级版,而且在使用上还有一些限制和配置负责,因此不多介绍。
首先介绍的是gpfdist协议的外部表,这个程序在master安装完后自带就存在的,在$GPHOME/bin目录下,在需要的时候手工启动,当然你也可以直接将这程序copy到别的机器上然后启动就可以充当外部表的服务器了。
7.1.0. gpfdist
[gpadmin@o564gtser1 gpfdist]$ ls /usr/local/greenplum-db/bin/gpfdist -l
-rwxr-xr-x 1 gpadmin gpadmin 819994 01-30 06:31 /usr/local/greenplum-db/bin/gpfdist
几个常用的参数:
-d 指定目录
-p 指定端口
-l 指定日志文件
[gpadmin@o564gtser1 gpfdist]$ pwd
/home/gpadmin/gpfdist
[gpadmin@o564gtser1 gpfdist]$ gpfdist -d ./ -p 8001 -l ./gpfdist.log &
[1] 4382
[gpadmin@o564gtser1 gpfdist]$ [2013-04-30 21:46:21] [WRN gpfdist.c:2049] Creating the socket failed
Serving HTTP on port 8001, directory /home/gpadmin/gpfdist
[gpadmin@o564gtser1 gpfdist]$ jobs
[1]+ Running gpfdist -d ./ -p 8001 -l ./gpfdist.log &
上面我手工启动了一个gpfdist服务器,目录是/home/gpadmin/gpfdist,端口8001,日志文件是/home/gpadmin/gpfdist/gpfdist.log,将下来我们将生产一个文本文件e1.txt,并手工输入一些记录,然后我们从数据库中创建一个外部表读取这些记录。
[gpadmin@o564gtser1 gpfdist]$ cat e1.txt
1001 'gtlions' 18
1002 'keven' 19
1003 'keyte' 32
1004 'leon.lee' 35
[gpadmin@o564gtser1 ~]$ psql -U gtlions gtlions
psql (8.2.15)
Type "help" for help.
--创建外部表e1
gtlions=# create external table e1 (id smallint,name varchar(30),age smallint) location ('gpfdist://o564gtser1:8001/e1.txt') format 'text';
CREATE EXTERNAL TABLE
--读取外部表的数据
gtlions=# select * from e1;
id | name | age
------+------------+-----
1001 | 'gtlions' | 18
1002 | 'keven
在gp中提供了几种方式用于加载和卸载数据:external tables、gpload、copy等等,这几种方式没有优劣之分,只是在不同场景下使用不同的技术而已。
7.1. 外部表
本文将首先测试使用外部表的方式进行加载和卸载数据。
外部表-external tables,分为只读readable和只写writable两种类别,而每种又可以分为常规regular和web两种类型。在外部表可以并行的查询、关联或者排序等等,视图也是可以基于外部表创建的,只是只读外部表只能select,只写外部表只能insert。
只读的常规regular和web外部表的区别是前者可以重读而后者无法重读。
和oracle当中的外部表类似,但是比oracle提供了更多中的协议方式,oracle当中只有平面文件file这种协议,而gp中提供了以下几种连接协议方式供外部表使用:gpfdist、gpfdists、file、gphdfs,gpfdists只是gpfdist的加密升级版,而且在使用上还有一些限制和配置负责,因此不多介绍。
首先介绍的是gpfdist协议的外部表,这个程序在master安装完后自带就存在的,在$GPHOME/bin目录下,在需要的时候手工启动,当然你也可以直接将这程序copy到别的机器上然后启动就可以充当外部表的服务器了。
7.1.0. gpfdist
[gpadmin@o564gtser1 gpfdist]$ ls /usr/local/greenplum-db/bin/gpfdist -l
-rwxr-xr-x 1 gpadmin gpadmin 819994 01-30 06:31 /usr/local/greenplum-db/bin/gpfdist
几个常用的参数:
-d 指定目录
-p 指定端口
-l 指定日志文件
[gpadmin@o564gtser1 gpfdist]$ pwd
/home/gpadmin/gpfdist
[gpadmin@o564gtser1 gpfdist]$ gpfdist -d ./ -p 8001 -l ./gpfdist.log &
[1] 4382
[gpadmin@o564gtser1 gpfdist]$ [2013-04-30 21:46:21] [WRN gpfdist.c:2049] Creating the socket failed
Serving HTTP on port 8001, directory /home/gpadmin/gpfdist
[gpadmin@o564gtser1 gpfdist]$ jobs
[1]+ Running gpfdist -d ./ -p 8001 -l ./gpfdist.log &
上面我手工启动了一个gpfdist服务器,目录是/home/gpadmin/gpfdist,端口8001,日志文件是/home/gpadmin/gpfdist/gpfdist.log,将下来我们将生产一个文本文件e1.txt,并手工输入一些记录,然后我们从数据库中创建一个外部表读取这些记录。
[gpadmin@o564gtser1 gpfdist]$ cat e1.txt
1001 'gtlions' 18
1002 'keven' 19
1003 'keyte' 32
1004 'leon.lee' 35
[gpadmin@o564gtser1 ~]$ psql -U gtlions gtlions
psql (8.2.15)
Type "help" for help.
--创建外部表e1
gtlions=# create external table e1 (id smallint,name varchar(30),age smallint) location ('gpfdist://o564gtser1:8001/e1.txt') format 'text';
CREATE EXTERNAL TABLE
--读取外部表的数据
gtlions=# select * from e1;
id | name | age
------+------------+-----
1001 | 'gtlions' | 18
1002 | 'keven