Tabellarische SQL-UDFs (UDTFs)¶
Snowflake unterstützt SQL-UDFs, die einen Satz von Zeilen zurückgeben, bestehend aus keiner, einer oder mehreren Zeilen, von denen jede eine oder mehrere Spalten aufweist. Solche UDFs heißen Tabellarische UDFs, Tabellen-UDFs oder am häufigsten UDTFs (benutzerdefinierte Tabellenfunktionen).
Der Zugriff auf eine UDTF kann über die FROM-Klausel einer Abfrage erfolgen.
Syntax¶
Eine ausführlichere Beschreibung der allgemeinen Syntax für alle UDFs, einschließlich SQL UDTFs, finden Sie unter CREATE FUNCTION.
Argumente¶
name:Dies sollte ein gültiger Datenbankobjektname sein, der den unter Anforderungen an Bezeichner beschriebenen Regeln folgt.
arguments:Dies muss ein Ausdruck sein, beispielsweise ein Spaltenname, ein Literal oder ein Ausdruck, der zu einem einzelnen Wert ausgewertet werden kann. Normalerweise nimmt eine Funktion ein Argument an, das einen Spaltennamen darstellt. Sie können mehrere Werte übergeben, z. B. mehr als einen Spaltennamen oder einen Spaltennamen und einen oder mehrere Literalwerte.
Es ist möglich, einen Konstantenwert oder keinen Wert zu übergeben. In den meisten Fällen ist die Ausgabe jedoch jedes Mal gleich, wenn die Eingabe jedes Mal gleich ist.
RETURNS TABLE(...)Gibt an, dass die UDF eine Tabelle zurückgeben soll. Geben Sie innerhalb der Klammern Name-Typ-Paare für Spalten (wie unten beschrieben) an, die in die zurückgegebene Tabelle aufgenommen werden sollen.
output_col_name:Name einer Ausgabespalte, die in die zurückgegebene Tabelle aufgenommen werden soll. Es muss mindestens eine Ausgabespalte vorhanden sein.
output_col_type:Der Datentyp der Ausgabespalte.
sql_expression:Ein gültiger SQL-Ausdruck oder eine gültige Anweisung, die eine Tabelle mit null oder mehrere Zeilen zurückgibt, von denen jede eine oder mehrere Spalten hat. Die Ausgaben müssen mit der Anzahl und den Datentypen übereinstimmen, die in der RETURNS-Klausel angegeben sind.
Nutzungshinweise¶
Der Hauptteil (auch „Definition“) einer SQL-UDTF muss ein SELECT-Ausdruck sein.
Obwohl die Trennzeichen um den SQL-Ausdruck
sql_expressionin der Regel einfache Anführungszeichen sind, können Sie doppelte Dollarzeichen$$als Trennzeichen verwenden. Das schließende Trennzeichen muss mit dem öffnenden Trennzeichen übereinstimmen. Doppelte Dollarzeichen sind praktisch, wennsql_expressioneinfache Anführungszeichen enthält. Ein Beispiel mit doppelten Dollarzeichen befindet sich im Abschnitt „Beispiele“ unten.Wenn das Trennzeichen ein einfaches Anführungszeichen ist und der Textkörper ein einfaches Anführungszeichen enthält, können Sie das einfache Anführungszeichen im Textkörper das Backslash-Zeichen
\als Escapezeichen verwenden. Ein Beispiel ist im Abschnitt „Beispiele“ unten zu finden.Die in der UDTF definierten Spalten können überall dort verwendet werden, wo eine normale Tabellenspalte verwendet werden kann.
Die in der RETURNS-Klausel angegebenen Rückgabetypen bestimmen Namen und Typen der Spalten in den Tabellenergebnissen und müssen mit den Typen der Ausdrücke an den entsprechenden Positionen der SELECT-Anweisung im Funktionsteil übereinstimmen.
Beim Aufrufen einer UDTF müssen Sie hinter dem Schlüsselwort TABLE in Klammern den Namen der UDTF und die Argumente angeben. Weitere Informationen dazu finden Sie unter Aufrufen einer SQL-UDTF.
Bemerkung
Tabellarische Funktionen (UDTFs) haben einen Grenzwert von 500 Eingabeargumenten und 500 Ausgabespalten.
Aufrufen einer SQL-UDTF¶
Wenn Sie eine UDTF in der FROM-Klausel einer Abfrage aufrufen, geben Sie den Namen und die Argumente der UDTF innerhalb der Klammern an, die dem Schlüsselwort TABLE folgen.
Verwenden Sie beim Aufrufen einer UDTF das Schlüsselwort TABLE in etwa wie folgt:
Beispiele für SQL-UDTFs¶
Grundlegende Beispiele¶
Dies ist ein stark vereinfachtes Beispiel für eine UDTF mit einer hartcodierten Ausgabe. Dies veranschaulicht auch die Verwendung von $$ als Trennzeichen:
Dieses Beispiel ähnelt dem vorhergehenden Beispiel, aber es verwendet einfache Anführungszeichen als Trennzeichen und das \ als Escapezeichen für die einfachen Anführungszeichen im Hauptteil der UDTF:
Dies ist ein weiteres grundlegendes Beispiel für eine UDTF. Dabei wird eine Tabelle abgefragt, und es werden zwei der Spalten aus dieser Tabelle zurückgegeben:
Dieselbe Funktionalität kann auch über eine Ansicht implementiert werden kann.
Beispiele mit Verknüpfungen (Joins)¶
Erstellen Sie eine SQL-UDTF, die Länderinformationen (COUNTRY_CODE und COUNTRY_NAME) für eine angegebene Benutzer-ID zurückgibt:
Erstellen Sie eine SQL-UDTF, die die Lieblingsfarbe für ein bestimmtes Jahr zurückgibt:
Rufen Sie die UDTF in einer Abfrage auf:
Verwenden Sie UDTF in einer Verknüpfung (Join) mit einer anderen Tabelle. Beachten Sie, dass die Join-Spalte aus der Tabelle als Argument an die Funktion übergeben wird.
Verwenden Sie für zusätzliche Prädikate anstelle von ON eine WHERE-Klausel:
Verwenden Sie UDTF mit einer Konstante in einem Join-Ausdruck. Beachten Sie, dass für zusätzliche Verknüpfungsbedingungen eine WHERE-Klausel anstelle von ON verwendet werden muss: