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
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
/nz/export/ae/utilities/bin/compile_ae --language r --version 3 \
--template compile --user nz --db dev /tmp/sampleudtf.REnregistrement
/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.REn cours d'exécution
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
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
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/sampleudtf.REnregistrement
/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.REn cours d'exécution
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
/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
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)