Snowflake Scripting-UDFs¶
Snowflake unterstützt benutzerdefinierte SQL-Funktionen (UDFs), die prozedurale Snowflake Scripting-Sprache enthalten. Diese UDFs werden als Snowflake Scripting-UDFs bezeichnet.
Snowflake Scripting-UDFs können in einer SQL-Anweisung aufgerufen werden, z. B. einer SELECT-Anweisung oder einer INSERT-Anweisung. Daher sind sie flexibler als eine gespeicherte Prozedur in Snowflake Scripting, die nur in einem SQL CALL-Befehl aufgerufen werden kann.
Allgemeine Nutzung¶
Ein Snowflake Scripting-UDF wertet prozeduralen Code aus und gibt einen skalaren (d. h. einzelnen) Wert zurück.
Sie können die folgende Teilmenge der Snowflake Scripting-Syntax in Snowflake Scripting-UDFs verwenden:
Unterstützte Datentypen¶
Snowflake Scripting-UDFs unterstützen die folgenden Datentypen für Eingabeargumente und Rückgabewerte:
Numerische Datentypen (z. B. INTEGER, NUMBER und FLOAT)
Zeichenfolgen- und Binärdatentypen (zum Beispiel VARCHAR und BINARY)
Datentypen für Datum und Uhrzeit (zum Beispiel DATE, TIME und TIMESTAMP)
Logische Datentypen (z. B. BOOLEAN)
Snowflake Scripting-UDFs unterstützen die folgenden Datentypen nur für Eingabeargumente:
Semistrukturierte Datentypen (zum Beispiel VARIANT, OBJECT und ARRAY)
Strukturierte Datentypen (z. B. ARRAY, OBJECT und MAP)
Einschränkungen¶
Die folgenden Einschränkungen gelten für Snowflake Scripting-UDFs:
Die folgenden Typen der Snowflake Scripting-Syntax werden in Snowflake Scripting-UDFs nicht unterstützt:
SQL-Anweisungen werden in Snowflake Scripting-UDFs (einschließlich SELECT, INSERT, UPDATE und so weiter) nicht unterstützt.
Snowflake Scripting-UDFs können nicht als Tabellenfunktionen definiert werden.
Die folgenden Ausdrucksarten werden in Snowflake Scripting-UDFs nicht unterstützt:
Benutzerdefinierte Funktionen
Aggregationsfunktionen
Fensterfunktionen
Snowflake Scripting-UDFs können beim Erstellen einer materialisierten Ansicht nicht verwendet werden.
Snowflake Scripting-UDFs können nicht verwendet werden, wenn Zeilenzugriffsrichtlinien und Maskierungsrichtlinien erstellt werden.
Snowflake Scripting-UDFs können nicht verwendet werden, um einen Standard-Spaltenwert anzugeben.
Snowflake Scripting-UDFs können nicht in einem COPY INTO-Befehl zum Laden und Entladen von Daten verwendet werden.
Snowflake Scripting-UDFs können nicht memoisierbar sein.
Snowflake Scripting-UDFs haben einen Grenzwert von 500 Eingabeargumenten.
Sie können keine Nachrichten für Snowflake Scripting-UDFs protokollieren.
Beispiele¶
In den folgenden Beispielen werden Snowflake Scripting-UDFs erstellt und aufgerufen:
Erstellen einer Snowflake Scripting-UDF mit Ausnahmebehandlung
Erstellen einer Snowflake Scripting-UDF, die einen Wert für eine INSERT-Anweisung zurückgibt
Erstellen einer Snowflake Scripting-UDF, die in WHERE- und ORDER BY-Klauseln aufgerufen wird
Snowflake Scripting-UDF mit Variablen erstellen¶
Erstellen Sie eine Snowflake Scripting-UDF, die den Gewinn anhand der Werte von zwei Argumenten berechnet:
Bemerkung
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
Rufen Sie calculate_profit in einer Abfrage auf:
Sie können das gleiche Snowflake Scripting-UDF verwenden und Spalten für die Argumente angeben. Erstellen Sie zunächst eine Tabelle und fügen Sie Daten ein:
Rufen Sie calculate_profit in einer Abfrage auf und geben die Spalten für die Argumente an:
Erstellen einer Snowflake Scripting-UDF mit bedingter Logik¶
Erstellen Sie eine Snowflake Scripting-UDF, die mit einer bedingte Logik den Abteilungsnamen auf der Grundlage eines eingegebenen INTEGER-Werts bestimmt:
Bemerkung
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
Rufen Sie check_dept in einer Abfrage auf:
Sie können eine SQL-Variable in einem Argument verwenden, wenn Sie eine Snowflake Scripting-UDF aufrufen. Das folgende Beispiel setzt eine SQL-Variable und verwendet diese Variable dann in einem Aufruf der check_dept-UDF:
Erstellen einer Snowflake Scripting-UDF mit einer Schleife¶
Erstellen Sie ein Snowflake Scripting-UDF, die mit einer Schleife alle Zahlen bis zu einer in einem Argument angegebenen Zielzahl zählt und die Summe aller gezählten Zahlen berechnet:
Bemerkung
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
Rufen Sie count_to in einer Abfrage auf:
Erstellen einer Snowflake Scripting-UDF mit Ausnahmebehandlung¶
Erstellen Sie eine Snowflake Scripting-UDF, die eine Ausnahme deklariert und dann die Ausnahme auslöst:
Bemerkung
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
Rufen Sie raise_exception in einer Abfrage auf, und geben Sie 1 als Eingabewert ein:
Rufen Sie raise_exception in einer Abfrage auf, und geben Sie 2 als Eingabewert ein:
Rufen Sie raise_exception in einer Abfrage auf, und geben Sie NULL als Eingabewert ein:
Erstellen einer Snowflake Scripting-UDF, die einen Wert für eine INSERT-Anweisung zurückgibt¶
Erstellen Sie eine Snowflake Scripting-UDF, die einen Wert zurückgibt, der in einer INSERT-Anweisung verwendet wird. Erstellen Sie die Tabelle, in die die Werte eingefügt werden:
Erstellen Sie eine SQL-UDF, die einen numerischen Wert zurückgibt:
Bemerkung
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
Rufen Sie value_to_insert in mehreren INSERT-Anweisungen auf:
Fragen Sie die Tabelle ab, um die eingefügten Werte anzuzeigen:
Erstellen einer Snowflake Scripting-UDF, die in WHERE- und ORDER BY-Klauseln aufgerufen wird¶
Erstellen Sie eine Snowflake Scripting-UDF, die einen Wert zurückgibt, der in einer WHERE- oder ORDER BY-Klausel verwendet wird. Erstellen Sie eine Tabelle, und fügen Sie Zeilen ein:
Erstellen Sie eine SQL-UDF, die einen numerischen Wert zurückgibt, der das Produkt der Multiplikation von zwei Eingabewerten ist:
Bemerkung
If you use Snowflake CLI, SnowSQL,
the Classic Console, or the execute_stream or execute_string method in
Python Connector code, this example requires minor
changes. For more information, see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector.
Rufen Sie get_product in der WHERE-Klausel einer Abfrage auf, um die Zeilen zurückzugeben, in denen das Produkt größer als 350 ist:
Rufen Sie get_product in der ORDER BY-Klausel einer Abfrage auf, um die Ergebnisse vom niedrigsten zum höchsten von der UDF zurückgegebenen Produkt zu ordnen: