R Funzione tabella lingue (modalità remota) 2
Questo esempio mostra come utilizzare la modalità remota per salvare lo stato di elaborazione dei dati tra le query successive.
Codice
Definire il solito set di oggetti R AE salvandoli nel file /tmp/remote.R come segue:
nz.fun <- function () {
if (!exists('x', envir=.GlobalEnv))
x <<- 0
x <<- x + 1
getNext()
setOutput(0, x)
outputResult()
}
In questo caso, l'operatore di assegnazione globale <<- assicura che lo stesso contatore x sia disponibile in tutte le chiamate.
Compilazione
In questo caso, l'operatore di assegnazione globale <<- assicura che lo stesso contatore x sia disponibile in tutte le chiamate.
/nz/export/ae/utilities/bin/compile_ae --language r \
--template compile --version 3 --db dev --user nz /tmp/remote.R
Registrazione
Registrate il launcher come segue:
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --template udtf --db dev --user nz \
--level 4 --mask DEBUG --sig "remote_rae_launch(int8)" \
--return "TABLE(aeresult varchar(255))" \
--remote --rname remote_rae --launch
Next, register the actual data-processing interface:
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --template udtf --db dev --user nz --level 4 \
--mask DEBUG --lastcall 'table final' --exe remote.R \
--sig "remote_rae(VARARGS)" --return "TABLE(cnt DOUBLE)" \
--remote --rname remote_rae
In esecuzione
L'esecuzione di un'AE remota richiede due passaggi.
Nella prima fase, lanciare l'AE remoto come segue:
SELECT * FROM TABLE WITH FINAL(REMOTE_RAE_LAUNCH(0));
Un esempio di output potrebbe essere il seguente:
AERESULT
----------------------------------------------------
tran: 91488 session: 16067 data slc: 0 hardware: 0 \
machine: netezza process: 13230 thread: 13230
(1 row)
Eseguire ora la query di elaborazione dei dati:
SELECT * FROM TABLE WITH FINAL(remote_rae(0));
CNT
-----
1
(1 row)
Le chiamate successive dovrebbero restituire 2, 3 e così via, poiché l'oggetto globale x viene incrementato ogni volta che viene invocato l'AE remoto.
Forme e dimensionamento in linguaggio R con gli AE remoti
Se il file /tmp/remote.R viene aggiornato per includere le ultime due righe dell'esempio di codice qui sotto, l'AE remoto può essere registrato ed eseguito con TABLE(ANY) specificato come output.
nz.fun <- function () {
if (!exists('x', envir=.GlobalEnv))
x <<- 0
x <<- x + 1
getNext()
setOutput(0, x)
outputResult()
}
nz.shaper <- 'std'
nz.shaper.list <- list(value=NZ.DOUBLE)
Si noti che le nuove variabili nz.shaper e nz.shaper.list vengono analizzate solo se l'UDAP è registrato con TABLE(ANY). Di conseguenza, non è necessario modificare il nome del file compilato, poiché il file viene sovrascritto.
La compilazione è quindi la stessa del caso della funzione tabella remota. Anche la registrazione del launcher UDX è la stessa. Tuttavia, la registrazione dell'interfaccia di elaborazione dei dati ha TABLE(ANY) come firma di uscita e un nome UDX diverso:
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --template udtf --db dev --user nz --level 4 \
--mask DEBUG --lastcall 'table final' --exe remote.R \
--sig "remote_rae2(VARARGS)" --return "TABLE(ANY)" \
--remote --rname remote_rae
SELECT * FROM TABLE WITH FINAL(remote_rae(0));
CNT
-----
4
(1 row)
SELECT * FROM TABLE WITH FINAL(remote_rae2(0));
VALUE
-------
5
(1 row)