Python语言标量函数(远程模式)

代码

在远程模式下运行的代码与本地模式下的代码相同。 请参见Python语言标量函数

部署

与本地模式一样,使用标准部署:

$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language python64 \
     --template deploy ./applyop.py --version 3

注册

要将Python文件注册为远程模式,请运行

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language python64 --version 3 \
     --template udf --exe applyop.py \
     --sig "remote_applyop(varchar(1), int4, int4)" --return int4 --remote \
     --rname applyOpRemote

此外,还注册了一个发射器:

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language python64 --version 3 \
     --template udtf --exe applyop.py --sig "launch_remote_applyop(int8)" \
     --return "TABLE(aeresult varchar(255))" --remote --launch \
     --rname applyOpRemote

除了--rname--exe--sig 的名称部分外,所有启动器都与本例类似。 启动器本身是 UDTF 而不是 UDF,因为这是所有启动器的接口。 名称必须与代码中的名称一致。

正在运行

要在远程模式下运行 AE,可执行文件要作为 "服务器 "运行 在这种情况下,它只处理在主机上运行的查询。 通常,AE 也在 SPU 上启动。 在内部,服务器 AE 收到来自 NPS 系统的请求后,会在调用nzaeRun() 之前 "分叉"。使用 nzsql 的启动命令启动主机上运行的可执行文件:

SELECT * FROM TABLE WITH FINAL(launch_remote_applyop(0));
AERESULT
-------------------------------------------------------------------------
tran: 7192 DATA slc: 0 hardware: 0 machine: spubox1 process: 8306 thread: 8306
(1 row)</pre>

运行 ps -aef | grep applyop 显示可执行文件正在主机上运行。 现在运行 AE:

SELECT remote_applyop('*', 2, 13);
 REMOTE_APPLYOP
----------------
             26