R función de tabla de idiomas (modo remoto) 2
Este ejemplo muestra cómo puede utilizar el modo remoto para guardar el estado de procesamiento de datos entre consultas posteriores.
Código
Defina el conjunto habitual de objetos R AE guardándolos en el archivo /tmp/remote.R de la siguiente manera:
nz.fun <- function () {
if (!exists('x', envir=.GlobalEnv))
x <<- 0
x <<- x + 1
getNext()
setOutput(0, x)
outputResult()
}
Aquí, el operador de asignación global <<- garantiza que el mismo contador x esté disponible en todas las llamadas.
Una compilación
Aquí, el operador de asignación global <<- garantiza que el mismo contador x esté disponible en todas las llamadas.
/nz/export/ae/utilities/bin/compile_ae --language r \
--template compile --version 3 --db dev --user nz /tmp/remote.R
Registro
Registre el lanzador de la siguiente manera:
/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
En ejecución
Ejecutar un AE remoto requiere dos pasos.
En el primer paso, inicie el AE remoto de la siguiente manera:
SELECT * FROM TABLE WITH FINAL(REMOTE_RAE_LAUNCH(0));
Un ejemplo de salida podría ser el siguiente:
AERESULT
----------------------------------------------------
tran: 91488 session: 16067 data slc: 0 hardware: 0 \
machine: netezza process: 13230 thread: 13230
(1 row)
Ahora ejecute la consulta de procesamiento de datos real:
SELECT * FROM TABLE WITH FINAL(remote_rae(0));
CNT
-----
1
(1 row)
Las llamadas posteriores deberían devolver 2, 3, y así sucesivamente, ya que el objeto global x se incrementa cada vez que se invoca al AE remoto.
R Language Shapes & Sizer con EA remotos
Si el archivo /tmp/remote.R se actualiza para incluir las dos últimas líneas del ejemplo de código que se muestra a continuación, el R AE remoto puede registrarse y ejecutarse con TABLE(ANY) especificado como salida.
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)
Tenga en cuenta que las nuevas variables, nz.shaper y nz.shaper.list se analizan sólo si el UDAP está registrado con TABLE(ANY). Como resultado, no es necesario cambiar el nombre del archivo compilado, ya que el archivo se sobrescribe.
Por lo tanto, la compilación es la misma que en el caso de la función de tabla remota. El registro del lanzador UDX también es el mismo. Sin embargo, el registro de la interfaz de procesamiento de datos tiene TABLE(ANY) como firma de salida y un nombre UDX diferente:
/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)