R função da tabela de idiomas (modo remoto) 2

Este exemplo mostra como você pode usar o modo remoto para salvar o estado de processamento de dados entre consultas subsequentes.

Código

Defina o conjunto usual de objetos R AE salvando-os no arquivo /tmp/remote.R da seguinte forma:

nz.fun <- function () { 
  if (!exists('x', envir=.GlobalEnv)) 
    x <<- 0 
  x <<- x + 1 
  getNext() 
  setOutput(0, x) 
  outputResult() 
}

Aqui, o operador de atribuição global <<- garante que o mesmo contador x esteja disponível em todas as chamadas.

Compilação

Aqui, o operador de atribuição global <<- garante que o mesmo contador x esteja disponível em todas as chamadas.

/nz/export/ae/utilities/bin/compile_ae --language r \
  --template compile --version 3 --db dev --user nz /tmp/remote.R

Registro

Registre o iniciador da seguinte forma:

/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

Executando

A execução de um AE remoto requer duas etapas.

Na primeira etapa, inicie o AE remoto da seguinte forma:

SELECT * FROM TABLE WITH FINAL(REMOTE_RAE_LAUNCH(0));

O exemplo de saída pode ser parecido com o seguinte:

  AERESULT 
---------------------------------------------------- 
 tran: 91488 session: 16067 data slc: 0 hardware: 0 \ 
 machine: netezza process: 13230 thread: 13230 
(1 row)

Agora, execute a consulta de processamento de dados real:

SELECT * FROM TABLE WITH FINAL(remote_rae(0));
 CNT
-----
 1
(1 row) 

As chamadas subsequentes devem retornar 2, 3 e assim por diante, pois o objeto global x é incrementado toda vez que o AE remoto é chamado.

R Language Shapes & Sizer com AEs remotos

Se o arquivo /tmp/remote.R for atualizado para incluir as duas últimas linhas do exemplo de código abaixo, o R AE remoto poderá ser registrado e executado com TABLE(ANY) especificado como saída.

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)

Observe que as novas variáveis, nz.shaper e nz.shaper.list, são analisadas somente se o UDAP estiver registrado com TABLE(ANY). Como resultado, não há necessidade de alterar o nome do arquivo compilado, pois o arquivo é substituído.

Portanto, a compilação é a mesma que no caso da função de tabela remota. O registro do iniciador UDX também é o mesmo. No entanto, o registro da interface de processamento de dados tem TABLE(ANY) como sua assinatura de saída e um nome 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
Se o AE remoto invocado anteriormente ainda estiver em execução, deverá ser possível acessá-lo por meio dos UDXs 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)