R Sprache skalare Funktion 1
Das folgende Beispiel erstellt eine Funktion, die die Gesamtlänge aller Zeicheneingabespalten zurückgibt.
Code erstellen
In R AE ist das Hauptobjekt, das vom Benutzer bereitgestellt wird, eine Funktion, die als " nz.fun
bezeichnet wird. Sie kapselt die Haupt-AE-Schleife und verwendet die R-AE-API, um Daten zu empfangen und auszugeben. Das folgende Beispiel zeigt die Implementierung von " applyop
in R.
nz.fun <- function () {
while(getNext()) {
op <- getInputColumn(0)
X <- c()
for (i in seq(1, inputColumnCount()-1)) {
x <- as.numeric(getInputColumn(i))
if (!is.null(x) && !is.na(x))
X <- append(X, x)
}
if (op != '+' && op != '*')
stop('incorrect operator: ', op)
setOutputInt32(0, eval(parse(text=paste(X, collapse=op))))
outputResult()
}
}
Die Hauptschleife endet, wenn ' getNext()
false zurückgibt, was bedeutet, dass keine weiteren Eingabezeilen zu verarbeiten sind. Der Zugriff auf jede Eingabezeile erfolgt über den " getInputColumn()
", der den Wert der durch seinen Index angegebenen Spalte zurückgibt. Der Index der ersten Spalte ist Null, und der Index der letzten Spalte ist " inputColumnCount()-1
. Die Ausgabewerte werden von den " setOutput*
-Funktionen verarbeitet, wobei das Sternchen für eine spezifische Datentypkennung steht. Um die Ausgabewerte an die Datenbank zu senden, muss die Funktion " outputResult()
aufgerufen werden.
Wenn ein Fehler auftritt, rufen Sie die R-Standardfunktion " stop()
auf, oder verwenden Sie die AE-API-Funktion " userError()
. Beide Funktionen unterbrechen die Programmausführung und geben die Fehlermeldung an den Aufrufer zurück.
Kompilierung
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/applyop.R
Während des Kompilierungsschritts wird die Eingabe-Quelldatei mit Hilfe der Standard-R-API serialisiert und für die weitere Ausführung vorbereitet. Die Ausgabe wird unter einem vordefinierten Pfad gespeichert, der je nach Datenbank und Benutzernamen vom Host und von den SPUs aus zugänglich ist.
Registrierung
- Als Name der Vorlage muss udf angegeben werden.
- Benutzername, Datenbankname und UDX-Signatur einschließlich Ausgabetyp müssen mit den Kompilierungswerten übereinstimmen.
- Der Name der ausführbaren Datei muss mit dem Namen der Quelldatei aus dem Kompilierungsschritt übereinstimmen.
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udf \
--sig 'applyop(VARARGS)' --return INT4 --exe applyop.R
Aktiv
SELECT applyop('+', 4, 10);
APPLYOP
---------
14
(1 row)
SELECT applyop('*', 3, 5);
APPLYOP
---------
15
(1 row)
SELECT applyop('-', 3, 5);
ERROR: Error in function () : incorrect operator: -