跳转至

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

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

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

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

create server execout foreign data wrapper execute_fdw;
create user mapping for public server execout;
create foreign table execout_table(like orders) server execout options(commands 'cat >/dev/null', format 'csv', is_writable 'true');
insert into execout_table select * from orders_fdw;
copy orders_fdw to program 'cat >@tempdir@/orders_fdw.out' (format 'csv', delimiter ',');

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

表 外部表EXECUTE变量

变量 描述
$SC_CID 执行外部表命令的事务的命令计数。
$SC_DATABASE 外部表定义所在的数据库。
$SC_DATE 外部表命令被运行的日期。
$SC_MASTER_HOST 分派外部表语句的SeaboxMPP的Coordinator主机的主机名。
$SC_MASTER_PORT 分派外部表语句的SeaboxMPP的Coordinator主机的端口号。
$SC_QUERY_STRING SeaboxMPP数据库执行的SQL命令(DML或SQL查询)。
$SC_SEG_DATADIR 执行外部表命令的executor实例的数据目录的位置。
$SC_SEG_PG_CONF 执行外部表命令的executor实例的seaboxsql.conf文件的位置。
$SC_SEG_PORT 执行外部表命令的executor的端口号。
$SC_SEGMENT_COUNT SeaboxMPP数据库系统中主要executor实例的总数。
$SC_SEGMENT_ID 执行外部表命令的executor实例的ID号(与sc_node_configuration中的dbid一样)。
$SC_SESSION_ID 与外部表语句相关的数据库会话标识号。
$SC_SN 外部表语句执行计划中外部表扫描节点的序号。
$SC_TIME 外部表命令被执行的时间。
$SC_USER 执行外部表语句的用户。
$SC_XID 外部表语句的事务ID。