Erstellung einer skalaren Python-UDF - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellung einer skalaren Python-UDF

Eine skalare Python-UDF enthält ein Python-Programm, das ausgeführt wird, wenn die Funktion aufgerufen wird, und die Funktion gibt dann einen einzelnen Wert zurück. Der Befehl CREATE FUNCTION wird mit den folgenden Parametern aufgerufen:

  • (Optional) Eingabeparameter, jeweils mit Namen und Datentyp

  • Ein Rückgabedatentyp

  • Ein ausführbares Python-Programm

Als Eingabe- und Rückgabedatentypen kommen SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE oder TIMESTAMP infrage. Zusätzlich können Python-UDFs den Datentyp ANYELEMENT verwenden. Dieser wird von Amazon Redshift basierend auf den zur Laufzeit bereitgestellten Argumenten automatisch in einen Standarddatentyp umgewandelt. Weitere Informationen finden Sie unter Datentyp ANYELEMENT

Wenn eine Amazon-Redshift-Abfrage eine skalare UDF aufruft, wird zur Laufzeit Folgendes durchgeführt.

  1. Die Funktion wandelt die Eingabeparameter werden in Python-Datentypen um.

    Ein Mapping von Amazon-Redshift-Datentypen zu Python-Datentypen finden Sie in Python-UDF-Datentypen.

  2. Die Funktion führt das Python-Programm mit den umgewandelten Eingabeparametern aus.

  3. Das Python-Programm gibt einen einzelnen Wert zurück. Der Datentyp des Rückgabewerts muss dem RETURNS-Datentyp in der Funktionsdefinition entsprechen.

  4. Die Funktion wandelt den Python-Rückgabewert in den angegebenen Amazon-Redshift-Datentyp um und gibt diesen Wert an die Abfrage zurück.

Anmerkung

Python 3 ist für Python-UDFs nicht verfügbar. Um Python 3-Unterstützung für Amazon-Redshift-UDFs zu erhalten, verwenden Sie stattdessen . Erstellen einer skalaren Lambda-UDF

Beispiel für eine skalare Python-UDF

Im folgenden Beispiel wird eine Funktion erstellt, die zwei Zahlen vergleicht und die größere zurückgibt. Beachten Sie, dass es sich bei der Einrückung des Codes zwischen den doppelten Dollarzeichen ($$) um eine Python-Anforderung handelt. Weitere Informationen finden Sie unter CREATE FUNCTION.

create function f_py_greater (a float, b float) returns float stable as $$ if a > b: return a return b $$ language plpythonu;

In der folgenden Abfrage wird die neue Funktion f_greater aufgerufen, um eine Abfrage über der Tabelle SALES auszuführen und entweder COMMISSION oder 20 Prozent von PRICEPAID zurückzugeben, je nachdem, welcher Wert größer ist.

select f_py_greater (commission, pricepaid*0.20) from sales;

Datentyp ANYELEMENT

ANYELEMENT ist ein polymorpher Datentyp. Wenn eine Funktion unter Verwendung von ANYELEMENT für den Datentyp eines Arguments deklariert wird, kann die Funktion alle Amazon-Redshift-Standarddatentypen als Eingabe für das betreffende Argument akzeptieren, wenn die Funktion aufgerufen wird. Der ANYELEMENT-Parameter wird auf den übergebenen Datentyp gesetzt, wenn die Funktion aufgerufen wird.

Wenn eine Funktion mehrere ANYELEMENT-Datentypen verwendet, werden sie beim Funktionsaufruf alle in denselben Datentyp aufgelöst. Alle ANYELEMENT-Parameter werden auf den Datentyp gesetzt, in den der erste übergebene ANYELEMENT-Parameter aufgelöst wird. Wenn eine Funktion beispielsweise als f_equal(anyelement, anyelement) deklariert ist, kann sie zwei beliebige Eingabewerte entgegennehmen, solange diese vom selben Datentyp sind.

Wenn Sie eine Funktion selbst als ANYELEMENT deklarieren, muss mindestens einer der Eingabeparameter vom Typ ANYELEMENT sein. Der tatsächliche Datentyp für den Rückgabewert ist identisch mit dem tatsächlichen Datentyp, der für das ANYELEMENT-Eingabeargument bereitgestellt wird.