定义基于命令的可写外部Web表

定义基于命令的可写外部Web表

用户可以定义可写的外部Web表把输出行发送到一个应用或者脚本。该应用必须接受一个输入流、在所有的Greenplum的Segment主机上位于相同位置并且对gpadmin用户可执行。Greenplum系统中的所有Segment都运行该应用或者脚本,不管Segment有没有输出行需要处理。

使用CREATE WRITABLE EXTERNAL WEB TABLE来定义外部表并且制定在Segment主机上运行的应用或者脚本。命令从数据库内部执行并且不能访问环境变量(例如$PATH)。在用户的可写外部表定义的EXECUTE子句中设置环境变量。例如:

=# CREATE WRITABLE EXTERNAL WEB TABLE output (output text) 
    EXECUTE 'export PATH=$PATH:/home/gpadmin
            /programs;
    myprogram.sh' 
    FORMAT 'TEXT'
    DISTRIBUTED RANDOMLY;

下面的Greenplum数据库变量可以用在一个Web或者可写外部表所执行的OS命令中。把这些变量设置为执行命令的shell中的环境变量。它们可以被用来标识外部表语句在Greenplum数据库的主机和Segment实例阵列之间所作的一个要求集合。

Table 1. 外部表EXECUTE变量
变量 描述
$GP_CID 执行外部表命令的事务的命令计数。
$GP_DATABASE 外部表定义所在的数据库。
$GP_DATE 外部表命令被运行的日期。
$GP_MASTER_HOST 分派外部表语句的Greenplum的Master主机的主机名。
$GP_MASTER_PORT 分派外部表语句的Greenplum的Master主机的端口号。
$GP_QUERY_STRING Greenplum数据库执行的SQL命令(DML或SQL查询)。
$GP_SEG_DATADIR 执行外部表命令的Segment实例的数据目录的位置。
$GP_SEG_PG_CONF 执行外部表命令的Segment实例的postgresql.conf文件的位置。
$GP_SEG_PORT 执行外部表命令的Segment的端口号。
$GP_SEGMENT_COUNT Greenplum数据库系统中主要Segment实例的总数。
$GP_SEGMENT_ID 执行外部表命令的Segment实例的ID号(与gp_segment_configuration中的dbid一样)。
$GP_SESSION_ID 与外部表语句相关的数据库会话标识号。
$GP_SN 外部表语句执行计划中外部表扫描节点的序号。
$GP_TIME 外部表命令被执行的时间。
$GP_USER 执行外部表语句的用户。
$GP_XID 外部表语句的事务ID。