定义基于命令的可写外部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实例阵列之间所作的一个要求集合。
变量 | 描述 |
---|---|
$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。 |