Fonction scalaire en langage Perl (mode distant)

Coder

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

Déploiement

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

$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language perl --version 3 \
--template deploy ApplyOp.pm

Enregistrement

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

$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language perl --version 3 \
     --template udf --exe ApplyOp.pm \
     --sig "remote_applyoppm(varchar(1), int4, int4)" --return int4 \
     --remote --rname applyOpRemotePm
En outre, un lanceur est enregistré :
$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language perl --version 3 \
     --template udtf --exe ApplyOp.pm --sig "launch_remote_applyoppm(int8)" \
     --return "TABLE(aeresult varchar(255))" --remote --launch \
     --rname applyOpRemotePm

À 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 --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, après que le serveur AE a reçu 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 sur la base de données du système :

SELECT * FROM TABLE WITH FINAL(launch_remote_applyoppm(0));
                           AERESULT
------------------------------------------------------------------------
tran: 296722 session: 16262 data slc: 0 hardware: 0 machine: vnairsim process:
19842 thread: 19842
(1 row)

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_applyoppm('*', 3, 32);
REMOTE_APPLYOPPM
------------------
               96
(1 row)

L'AE en cours d'exécution peut être arrêtée de la manière suivante :

SELECT aeresult FROM TABLE WITH FINAL(inza..nzaejobcontrol('stop', 0,
'applyOpRemotePm',false, NULL, NULL));
                             AERESULT
-------------------------------------------------------------------------
vnairsim 24631 (applyOpRemotePm dataslc:-1 sess:-1 trans:-1) AE stopped
(1 row)