GreenPlum 有一个非常好的特性,外部表与WEB表。通过gpfdist,localfile,http,shell命令 等协议作为外部表的传输协议。

这里主要来讲讲gpfdist协议下的外部表使用。

要实现外部表的功能,需要具备几个条件:

1.存放外部表文件的服务器,并启用gpfdist。

2.所有GreenPlum数据库节点(含主节点,备份节点)需要能通过统一的IP访问到存放外部表的服务器,并可以访问到目录。(为了确保性能尽量使用局域网)

3.创建外部表的METADATA,(即建表)

4.可选,外部表需要每一个GPfdIST节点上面都有可被访问的文件,这个在创建之初的时候可能没有。那么可以在创建之初的时候,将部分初始数据写入所有的外部表存储目录当中。防止访问外部表异常。

下面是一个简单的架构图:

GreenPlum外部表的简单模型  _GreenPlum 外部表的简单模型

GreenPlum数据库集群与外部表存储服务器处于同一个局域网,包括新增的外部表服务器也需要处于同一局域网内,以确保数据传输性能。

ETL程序负责将数据源过来的数据转换为数据仓库所需要的格式,并均匀分发到各个GPfdIST服务器的相应外部表目录。

GPfdIST扩容的过程:

1.首先修改ETL程序,增加分发目标。

2.修改外部表的METADATA,增加GPfdIST目录。

3.可选,为避免访问新增的外部表数据源出错,可以增加初始数据文件到相应的外部表数据目录。

外部表的好处:

扩展非常方便;删除数据也很方便,如使用时间戳来命名文件,只需要删除相应的文件即可;。

外部表的缺点:

访问效率比内部表差很多;可能会出现异常数据,需要使用reject limit来过滤;权限控制这块较弱;当数据库字段变更时维护不方便。

外部表的一般用途:

用作实时的增量数据传输;作为入库前的中转存放形态。

外部表的限制:

只读,不能创建索引。

静态访问

建表示例:


CREATE EXTERNAL TABLE ext_expenses ( 字段定义 )

LOCATION (‘gpfdist://etlhost-1:8081/*’,

‘gpfdist://etlhost-2:8081/*’)

FORMAT ‘TEXT’ (DELIMITER ‘,’);