Funzioni aggiuntive di tabella semplice in linguaggio R
Per comprendere meglio i concetti di R AE, si considerino i seguenti esempi.
Esempio di funzione della tabella 1
Questo esempio crea una funzione che restituisce la lunghezza totale delle colonne di input di caratteri e la somma totale di tutte le colonne di input numerici per ogni riga di input.
Codice
nz.fun <- function () {
while(getNext()) {
tl <- 0
ts <- 0
for (i in seq(inputColumnCount())) {
x <- getInputColumn(i-1)
if (is.character(x)) {
tl <- tl + nchar(x)
}
if (is.numeric(x)) {
ts <- ts + as.double(x)
}
}
setOutputInt32(0, tl)
setOutputDouble(1, ts)
outputResult()
}
}
Compilazione
/nz/export/ae/utilities/bin/compile_ae --language r --version 3 \
--template compile --user nz --db dev /tmp/sampleudtf.RRegistrazione
/nz/export/ae/utilities/bin/register_ae --language r --version 3 --user nz \
--db dev --template udtf --sig 'rtotal(VARCHAR(1024),DOUBLE)' \
--return 'TABLE(length INT4, sum DOUBLE)' --exe sampleudtf.RIn esecuzione
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
LENGTH | SUM
--------+-----
4 | 1
(1 row)
Tabella Funzione Esempio 2
Questo esempio mostra più righe di output. Poiché la lunghezza totale delle colonne di caratteri è un
Codice
nz.fun <- function () {
while(getNext()) {
tl <- 0
ts <- 0
for (i in seq(inputColumnCount())) {
x <- getInputColumn(i-1)
if (is.character(x)) {
tl <- tl + nchar(x)
}
if (is.numeric(x)) {
ts <- ts + as.double(x)
}
}
setOutputString(0, 'total length of character columns')
setOutputDouble(1, tl)
outputResult()
setOutputString(0, 'total sum of numerics')
setOutputDouble(1, ts)
outputResult()
}
}
e la somma totale di numeric è di tipo double, scegliete il tipo di dati più flessibile per la seconda colonna di uscita in base ai tipi di dati degli ingressi, in questo caso double. Il codice R è leggermente diverso per questo esempio.
Compilazione
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/sampleudtf.RRegistrazione
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udtf \
--sig 'rtotal(VARCHAR(1024),DOUBLE)' \
--return 'TABLE(name VARCHAR(64), value DOUBLE)' \
--exe sampleudtf.RIn esecuzione
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
NAME | VALUE
-----------------------------------+-------
total length of character columns | 4
total sum of numerics | 1
(2 rows)
Tabella Funzione Esempio 3
Modificando il comando di registrazione dell'esempio precedente, è possibile creare una funzione di firma di ingresso dinamica utilizzando VARARGS.
I passaggi relativi al codice R e alla compilazione sono gli stessi dell'esempio precedente.
Registrazione
/nz/export/ae/utilities/bin/register_ae --language r --version 3 \
--user nz --db dev --template udtf --sig 'rtotal(VARARGS)' \
--exe sampleudtf.R --return 'TABLE(name VARCHAR(64), value DOUBLE)'In esecuzione
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1, 'second text',
2, 3, 4, 'the last text'));
NAME | VALUE
-----------------------------------+-------
total length of character columns | 28
total sum of numerics | 10
(2 rows)