使用一种自定协议

Greenplum提供了诸如gpfdist、http以及file等协议来通过网络访问数据,或者用户可以创作一个自定义协议。用户可以为自定义协议使用标准的数据格式TEXTCSV,或者使用一种自定义数据格式。

只要可用的内建协议无法满足一种特定需要,用户就可以创建一种自定义的协议。例如,如果用户需要并行地把Greenplum数据库直接连接到另一个系统,并且在两者之间发送数据流而无需在磁盘上物化系统数据或者使用gpfdist这样的中间进程。用户必须是超级用户才能创建和注册自定义协议。

  1. 用C语言和预定义的API创作发送、接受以及(可选的)验证器函数。这些函数会被编译并且注册在Greenplum数据库中。自定义协议的例子可见自定义数据访问协议实例
  2. 在编写并且编译读写函数到一个共享对象(.so)中之后,声明一个数据库函数指向该.so文件和函数名。 下面的例子使用了编译好的导入和导出代码。
CREATE FUNCTION myread() RETURNS integer
as '$libdir/gpextprotocol.so', 'myprot_import'
LANGUAGE C STABLE;
CREATE FUNCTION mywrite() RETURNS integer
as '$libdir/gpextprotocol.so', 'myprot_export'
LANGUAGE C STABLE;

可选函数的格式是:

CREATE OR REPLACE FUNCTION myvalidate() RETURNS void 
AS '$libdir/gpextprotocol.so', 'myprot_validate' 
LANGUAGE C STABLE;
  1. 创建一个访问这些函数的协议。Validatorfunc是可选的。
    CREATE TRUSTED PROTOCOL myprot(
    writefunc='mywrite',
    readfunc='myread', 
    validatorfunc='myvalidate');
    
  2. 必要时,把访问权限授予给任何其他用户。
GRANT ALL ON PROTOCOL myprot TO otheruser;
  1. 在可读或可写外部表中使用该协议。
CREATE WRITABLE EXTERNAL TABLE ext_sales(LIKE sales)
LOCATION ('myprot://<meta>/<meta>/…')
FORMAT 'TEXT';
CREATE READABLE EXTERNAL TABLE ext_sales(LIKE sales)
LOCATION('myprot://<meta>/<meta>/…')
FORMAT 'TEXT';

用SQL命令CREATE TRUSTED PROTOCOL声明自定义协议,然后使用GRANT命令把访问权限授予给用户。例如:

  • 允许一个用户使用一种受信的协议创建一个可读的外部表
    GRANT SELECT ON PROTOCOL <protocol name> TO <user name>;
    
  • 允许一个用户使用一种受信的协议创建一个可写的外部表
    GRANT INSERT ON PROTOCOL <protocol name> TO <user name>;
    
  • 允许一个用户使用一种受信的协议创建一个可读写的外部表
    GRANT ALL ON PROTOCOL <protocol name> TO <user name>;
    

Parent topic: 装载和写入非HDFS自定义数据

当前内容版权归GreenPlum和翻译组所有,若有侵权请联系删除下架 修订时间: 2024-09-15 21:48:07

results matching ""

    No results matching ""