创建和使用外部Web表
外部Web表允许Greenplum Database像处理常规数据表一样处理动态数据源。由于Web表数据可以在查询运行时更改,因此数据无法重新扫描。
CREATE EXTERNAL WEB TABLE
建立一个外部表的定义。你可以定义基于命令或基于URL的外部Web表。定义形式是不同的: 不能将基于命令的和基于URL的定义混在一起。
Parent topic: 定义外部表
基于命令的外部Web表
一个shell命令或者脚本的输出可定义基于命令的Web表数据。将
命令放在CREATE EXTERNAL WEB TABLE
的EXECUTE
子句里。数据是命令运行时的最新数据。
子句EXECUTE
在指定的master或segment节点上运行shell命令或脚本。命令和脚本必须存在于EXECUTE
子句中定义的host上。
默认,命令会在当活跃节点上有输出的行要处理时,运行在节点上。
例如,如果每个宿主机器上运行4个有输出行待处理的节点实例,
命令会在每个宿主机器上运行4次。
可以限制运行web表命令的节点实例数量。
所有在web表定义ON
子句中的节点会并行运行命令。
指定在外部表定义中的命令会从数据库运行,但不会从.bashrc
或.profile
中加载环境变量。
在EXECUTE
子句中设置环境变量。例如:
=# CREATE EXTERNAL WEB TABLE output (output text)
EXECUTE 'PATH=/home/gpadmin/programs; export PATH; myprogram.sh'
FORMAT 'TEXT';
脚本必须对于gpadmin
用户是可执行的,并且在master和segment节点上路径相同。
下面命令定义了一个运行脚本的web表。 脚本运行在有数据需要处理的节点上。
=# CREATE EXTERNAL WEB TABLE log_output
(linenum int, message text)
EXECUTE '/var/load_scripts/get_log_data.sh' ON HOST
FORMAT 'TEXT' (DELIMITER '|');
基于URL的外部Web表
基于URL的web表从HTTP协议的服务器访问数据。 Web表数据是动态的,不可重新扫描的。
在LOCATION
里定义基于http://
协议的web服务文件路径。
web数据文件必须存在于Greenplum节点可访问的web服务器上。
指定的URL数量与并行访问web表的节点实例数量相关。
例如,如果为一个有8个节点的Greenplum数据库指定两个外部文件,
8个节点中的两个会在查询运行时并行访问web表。
下面的例子定义了一个从多个URL获取数据的web表。
=# CREATE EXTERNAL WEB TABLE ext_expenses (name text,
date date, amount float4, category text, description text)
LOCATION (
'http://intranet.company.com/expenses/sales/file.csv',
'http://intranet.company.com/expenses/exec/file.csv',
'http://intranet.company.com/expenses/finance/file.csv',
'http://intranet.company.com/expenses/ops/file.csv',
'http://intranet.company.com/expenses/marketing/file.csv',
'http://intranet.company.com/expenses/eng/file.csv'
)
FORMAT 'CSV' ( HEADER );