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
Se l'AE remoto invocato in precedenza è ancora in funzione, dovrebbe essere possibile accedervi attraverso gli UDX remote_rae e remote_rae2:
SELECT * FROM TABLE WITH FINAL(remote_rae(0));
 CNT
-----
   4
(1 row)

SELECT * FROM TABLE WITH FINAL(remote_rae2(0));
 VALUE
-------
     5
(1 row)