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

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

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

  1. =# CREATE WRITABLE EXTERNAL WEB TABLE output (output text)
  2. EXECUTE 'export PATH=$PATH:/home/gpadmin
  3. /programs;
  4. myprogram.sh'
  5. FORMAT 'TEXT'
  6. 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_STRINGGreenplum数据库执行的SQL命令(DML或SQL查询)。
$GP_SEG_DATADIR执行外部表命令的Segment实例的数据目录的位置。
$GP_SEG_PG_CONF执行外部表命令的Segment实例的postgresql.conf文件的位置。
$GP_SEG_PORT执行外部表命令的Segment的端口号。
$GP_SEGMENT_COUNTGreenplum数据库系统中主要Segment实例的总数。
$GP_SEGMENT_ID执行外部表命令的Segment实例的ID号(与gp_segment_configuration中的dbid一样)。
$GP_SESSION_ID与外部表语句相关的数据库会话标识号。
$GP_SN外部表语句执行计划中外部表扫描节点的序号。
$GP_TIME外部表命令被执行的时间。
$GP_USER执行外部表语句的用户。
$GP_XID外部表语句的事务ID。

Parent topic: 从Greenplum数据库卸载数据