Função de linha simulada da linguagem R

Código

O exemplo a seguir cria uma função de linha simulada que recebe como entrada uma representação de cadeia de caracteres de tempo, por exemplo, "12:30:55", e gera uma linha de 3 linhas com a entrada dividida em suas partes componentes.

Digite o seguinte código no arquivo " /tmp/split.R:
nz.fun <- function() {
while(getNext()) {
chunks <- strsplit(getInputColumn(0), ':')[[1]]
for (i in seq(chunks))
setOutputString(i-1, chunks[i])
outputResult()
}
}

Compilação

Compile o código da seguinte forma:
/nz/export/ae/utilities/bin/compile_ae --language r --version 3 \
--template compile --user nz --db dev /tmp/split.R

Registro

Como não há um conceito incorporado de uma função de linha no Netezza SQL, essa função é registrada como uma função de tabela, mesmo que produza apenas uma linha por linha de entrada:
/nz/export/ae/utilities/bin/register_ae --language r --version 3 \
--template udtf --exe split.R --sig "split(VARCHAR(20))" \
--return "TABLE(hour VARCHAR(2), minute VARCHAR(2), second VARCHAR(2))"

Executando

Quando você executa essa função no nzsql, obtém o seguinte resultado:
SELECT * FROM TABLE WITH FINAL(split('13:22:47'));
HOUR | MINUTE | SECOND
------+--------+--------
13 | 22 | 47