Zusätzliche einfache Tabellenfunktionen der Sprache R

Zum besseren Verständnis des Konzepts der Agrarumweltmaßnahmen können Sie sich die folgenden Beispiele ansehen.

Tabellenfunktion Beispiel 1

In diesem Beispiel wird eine Funktion erstellt, die die Gesamtlänge der Zeicheneingabespalten und die Gesamtsumme aller numerischen Eingabespalten für jede Eingabezeile zurückgibt.

Code erstellen

Geben Sie den folgenden Code in die Datei " /tmp/sampleudtf.R ein:
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()
}
}

Kompilierung

Kompilieren Sie die Datei wie folgt:
/nz/export/ae/utilities/bin/compile_ae --language r --version 3 \
--template compile --user nz --db dev /tmp/sampleudtf.R

Registrierung

Registrieren Sie die AE wie folgt:
/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

Aktiv

Führen Sie die UDTF wie folgt aus:
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
LENGTH | SUM
--------+-----
4 | 1
(1 row)

Tabelle Funktion Beispiel 2

Dieses Beispiel zeigt mehrere Ausgabezeilen. Da die Gesamtlänge der Zeichenspalten ein

Code erstellen

Geben Sie den folgenden Code in die Datei " /tmp/sampleudtf.R ein:
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()
}
}

integer, und die Gesamtsumme von numeric ist vom Typ double, wählen Sie den flexibelsten Datentyp für die zweite Ausgabespalte auf der Grundlage der Datentypen der Eingaben, in diesem Fall double. Der R-Code weicht für dieses Beispiel leicht ab.

Kompilierung

Kompilieren Sie die Datei wie folgt:
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/sampleudtf.R

Registrierung

Registrieren Sie die AE wie folgt. Aufgrund der unterschiedlichen Ausgabe müssen Sie bei der Registrierung eine andere Ausgabesignatur angeben.
/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

Aktiv

Wenn Sie diese Funktion aufrufen, erhalten Sie die folgende Ausgabe:
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
NAME | VALUE
-----------------------------------+-------
total length of character columns | 4
total sum of numerics | 1
(2 rows)

Tabelle Funktion Beispiel 3

Wenn Sie den Registrierungsbefehl aus dem vorherigen Beispiel ändern, können Sie eine Funktion mit dynamischer Eingabesignatur erstellen, indem Sie VARARGS verwenden.

Die Schritte für den R-Code und die Kompilierung sind die gleichen wie im vorherigen Beispiel.

Registrierung

Registrieren Sie die AE wie folgt:
/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)'

Aktiv

Sie können nun eine beliebige Anzahl von Spalten an R übergeben:
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)