基于命令的外部Web表

基于命令的外部Web表

一个shell命令或者脚本的输出可定义基于命令的Web表数据。在CREATE EXTERNAL WEB TABLEEXECUTE子句中指定该命令。EXECUTE子句会在指定的Master以及(一个或者多个)Segment主机上运行该shell命令或脚本。该命令或脚本必须位于EXECUTE子句中定义的主机上。

默认情况下,当活动Segment有输出行要处理时,该命令运行在Segment主机上。例如,如果每一个Segment主机运行四个有输出行要处理的主Segment实例,该命令在每个Segment主机上会运行四次。用户可以有选择地限制执行Web表命令的Segment实例的数量。ON子句中Web表定义里包括的所有Segment会并行运行该命令。

用户在外部表定义中指定的命令从数据库中执行并且不能访问来自.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表。该脚本在每一台有需要处理输出行的Segment的Segment主机上运行。

=# CREATE EXTERNAL WEB TABLE log_output 
    (linenum int, message text) 
    EXECUTE '/var/load_scripts/get_log_data.sh' ON HOST 
    FORMAT 'TEXT' (DELIMITER '|');