Fonctions supplémentaires du tableau simple en langage R

Pour mieux comprendre les concepts du R AE, prenons les exemples suivants.

Exemple de fonction du tableau 1

Cet exemple crée une fonction qui renvoie la longueur totale des colonnes d'entrée de caractères et la somme totale de toutes les colonnes d'entrée numériques pour chaque ligne d'entrée.

Coder

Introduisez le code suivant dans le fichier " /tmp/sampleudtf.R " :
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()
}
}

Compilation

Compilez le fichier comme suit :
/nz/export/ae/utilities/bin/compile_ae --language r --version 3 \
--template compile --user nz --db dev /tmp/sampleudtf.R

Enregistrement

Enregistrez l'AE comme suit :
/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.R

En cours d'exécution

Exécutez l'UDTF comme suit :
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
LENGTH | SUM
--------+-----
4 | 1
(1 row)

Tableau Fonction Exemple 2

Cet exemple montre plusieurs lignes de sortie. Comme la longueur totale des colonnes de caractères est un

Coder

Introduisez le code suivant dans le fichier " /tmp/sampleudtf.R " :
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()
}
}

entier, et la somme totale du numérique est de type double, choisissez le type de données le plus flexible pour la deuxième colonne de sortie en fonction des types de données des entrées, en l'occurrence double. Le code R diffère légèrement pour cet exemple.

Compilation

Compilez le fichier comme suit :
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/sampleudtf.R

Enregistrement

Enregistrez l'AE comme suit. En raison de la différence de sortie, vous devez spécifier une signature de sortie différente lors de l'enregistrement.
/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.R

En cours d'exécution

Lorsque vous appelez cette fonction, vous obtenez le résultat suivant :
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
NAME | VALUE
-----------------------------------+-------
total length of character columns | 4
total sum of numerics | 1
(2 rows)

Tableau Fonction Exemple 3

En modifiant la commande d'enregistrement de l'exemple précédent, vous pouvez créer une fonction de signature d'entrée dynamique en utilisant VARARGS.

Les étapes du code R et de la compilation sont les mêmes que dans l'exemple précédent.

Enregistrement

Enregistrez l'AE comme suit :
/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)'

En cours d'exécution

Vous pouvez maintenant passer un nombre quelconque de colonnes à R :
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)