Skalarfunktion in der Sprache Python (Remote-Modus)

Code erstellen

Der Code für den Remote-Modus ist derselbe wie der Code für den lokalen Modus. Siehe Skalarfunktion der SprachePython.

Bereitstellung

Verwenden Sie die Standardverteilung, wie im lokalen Modus:

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

Registrierung

Um die Python für den Remote-Modus zu registrieren, führen Sie aus:

$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

Außerdem wird ein Launcher registriert:

$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

Mit Ausnahme von --rname, --exe und dem Namensteil von --sig sehen alle Startprogramme wie dieses Beispiel aus. Der Launcher selbst ist ein UDTF und kein UDF, da dies die Schnittstelle für alle Launcher ist. Der --rname muss mit dem Namen im Code übereinstimmen.

Aktiv

Um die AE im Remote-Modus auszuführen, wird die ausführbare Datei als "Server" ausgeführt In diesem Fall werden nur auf dem Host ausgeführte Abfragen bearbeitet. In der Regel werden die Agrarumweltmaßnahmen auch auf den SPUs gestartet. Nachdem der Server AE eine Anfrage vom NPS-System erhalten hat, wird er intern "geforkt", bevor er nzaeRun() aufruft. Starten Sie die auf dem Host laufende ausführbare Datei mit dem Befehl launch von 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>

Die Ausführung von ps -aef | grep applyop zeigt, dass die ausführbare Datei auf dem Host ausgeführt wird. Führen Sie nun die AE aus:

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