Fonction scalaire en langage Python (mode distant)

Coder

Le code à exécuter en mode distant est le même que celui du mode local. Voir Fonction scalaire en langagePython.

Déploiement

Utiliser le déploiement standard, comme en mode local :

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

Enregistrement

Pour enregistrer le fichier Python pour le mode distant, exécutez :

$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

En outre, un lanceur est enregistré :

$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

À l'exception de --rname, --exe et de la partie nom de --sig, tous les lanceurs ressemblent à cet exemple. Le lanceur lui-même est un UDTF et non un UDF puisqu'il s'agit de l'interface de tous les lanceurs. Le nom --rname doit correspondre au nom dans le code.

En cours d'exécution

Pour exécuter l'AE en mode distant, l'exécutable est exécuté en tant que "serveur" Dans ce cas, il ne traite que les requêtes exécutées sur l'hôte. En général, les AE sont également lancés sur les SPU. En interne, lorsque le serveur AE reçoit une requête du système NPS, il "bifurque" avant d'appeler nzaeRun(). Lancez l'exécutable sur l'hôte à l'aide de la commande de lancement de 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>

L'exécution de ps -aef | grep applyop montre que l'exécutable est en cours d'exécution sur l'hôte. Exécutez maintenant l'AE :

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