基于命令的外部Web表

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

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

用户在外部表定义中指定的命令从数据库中执行并且不能访问来自.bashrc或者.profile的环境变量。可在EXECUTE子句中设置环境变量。例如:

  1. =# CREATE EXTERNAL WEB TABLE output (output text)
  2. EXECUTE 'PATH=/home/gpadmin/programs; export PATH; myprogram.sh'
  3. FORMAT 'TEXT';

脚本必须对gpadmin用户可执行并且在Master或者Segment主机上位于同一位置。

下列命令定义一个运行脚本的Web表。该脚本在每一台有需要处理输出行的Segment的Segment主机上运行。

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

上级主题: 创建并使用外部Web表