GreenPlum 有一个非常好的特性,外部表与WEB表。通过gpfdist,localfile,http,shell命令 等协议作为外部表的传输协议。
这里主要来讲讲gpfdist协议下的外部表使用。
要实现外部表的功能,需要具备几个条件:
1.存放外部表文件的服务器,并启用gpfdist。
2.所有GreenPlum数据库节点(含主节点,备份节点)需要能通过统一的IP访问到存放外部表的服务器,并可以访问到目录。(为了确保性能尽量使用局域网)
3.创建外部表的METADATA,(即建表)
4.可选,外部表需要每一个GPfdIST节点上面都有可被访问的文件,这个在创建之初的时候可能没有。那么可以在创建之初的时候,将部分初始数据写入所有的外部表存储目录当中。防止访问外部表异常。
下面是一个简单的架构图:
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 ‘,’);