Tabellenfunktionen¶
Eine Tabellenfunktion gibt für jede Eingabezeile eine Menge von Zeilen zurück. Die zurückgegebene Menge kann null, eine oder mehrere Zeilen enthalten. Jede zurückgegebene Zeile kann eine oder mehrere Spalten enthalten.
Tabellenfunktionen werden manchmal als „tabellarische Funktionen“ bezeichnet.
Unter diesem Thema:
Was sind Tabellenfunktionen?¶
Tabellenfunktionen werden normalerweise verwendet, wenn eine Funktion für eine einzelne Eingabe mehrere Zeilen zurückgibt.
Jedes Mal, wenn eine Tabellenfunktion aufgerufen wird, kann sie eine andere Anzahl von Zeilen zurückgeben. Die Funktion record_high_temperatures_for_date()
, die eine Liste der Rekordhöchsttemperaturen für ein bestimmtes Datum liefert, könnte zum Beispiel 0 Zeilen für den 10. April, 1 Zeile für den 10. Juni und 40 Zeilen für den 20. August zurückgeben.
Einfache Beispiele für Tabellenfunktionen¶
Folgende Funktionen wären beispielsweise als Tabellenfunktionen geeignet:
Eine Funktion, die eine Kontonummer und ein Datum akzeptiert und alle Gebühren zurückgibt, die diesem Konto an diesem Datum in Rechnung gestellt wurden. (Es kann sein, dass an einem bestimmten Datum mehr als eine Gebühr abgerechnet wurde).
Eine Funktion, die eine ID-Benutzer annimmt und die diesem Benutzer zugewiesenen Datenbankrollen zurückgibt. (Ein Benutzer kann mehrere Rollen haben, einschließlich „sysadmin“ und „useradmin“).
Funktionen, bei denen jede Ausgabezeile von mehreren Eingabezeilen abhängt¶
Tabellenfunktionen lassen sich nach der Anzahl der Eingabezeilen, die Auswirkungen auf jede Ausgabezeile haben, in zwei Kategorien unterteilen:
1:N
M:N
Die zuvor beschriebenen Funktionen sind 1:N-Tabellenfunktionen: Jede Ausgabezeile hängt von nur einer Eingabezeile ab. Die Funktion record_high_temperatures_for_date()
könnte zum Beispiel mehrere Ausgabezeilen erzeugen (eine für jede Stadt, für die zu diesem Datum ein Datensatz vorliegt). Jede Ausgabezeile für ein bestimmtes Eingabedatum hängt nur von diesem Datum ab, während jede Ausgabezeile unabhängig von den Zeilen für jedes andere Datum ist.
Snowflake unterstützt auch M:N-Tabellenfunktionen: Jede Ausgabezeile kann von mehreren Eingabezeilen abhängen. Wenn beispielsweise eine Funktion einen gleitenden Durchschnitt von Aktienkursen generiert, verwendet diese Funktion Aktienkurse aus mehreren Eingabezeilen (mehrere Tage), um jede Ausgabezeile zu generieren.
Bei einer M:N-Funktion generiert eine Gruppe von M Eingabezeilen eine Gruppe von N Ausgabezeilen. M kann eine oder mehrere Zeilen sein. N kann null, eine oder mehrere Zeilen sein.
Bei einem gleitenden Durchschnitt von 10 Tagen ist M zum Beispiel 10. N ist 1, weil jede Gruppe von 10 Eingabezeilen einen Durchschnittspreis ergibt.
Integrierte Tabellenfunktionen vs. benutzerdefinierte Tabellenfunktionen¶
Snowflake bietet Hunderte von integrierten Funktionen, von denen viele Tabellenfunktionen sind. Integrierte Tabellenfunktionen sind unter Systemdefinierte Tabellenfunktionen aufgeführt.
Benutzer können auch ihre eigenen Funktionen schreiben, die so genannten benutzerdefinierten Funktionen oder UDFs (User-defined Functions). Einige UDFs sind skalar, andere sind tabellarisch. Benutzerdefinierte Tabellenfunktionen werden UDTFs (User-defined Table Functions) genannt. Weitere Informationen zu UDFs (einschließlich UDTFs) finden Sie unter Übersicht zu benutzerdefinierten Funktionen.
Integrierte Tabellenfunktionen und benutzerdefinierte Tabellenfunktionen folgen im Allgemeinen den gleichen Regeln. So werden sie beispielsweise auf die gleiche Weise von SQL-Anweisungen aufgerufen.
Verwenden von Tabellenfunktionen¶
Verwenden einer Tabellenfunktion in der FROM-Klausel¶
Eine Tabelle enthält eine Menge von Zeilen. In ähnlicher Weise gibt eine Tabellenfunktion eine Menge von Zeilen zurück. Sowohl Tabellen als auch Tabellenfunktionen werden in Kontexten verwendet, die eine Menge von Zeilen erwarten. Insbesondere werden Tabellenfunktionen in der FROM-Klausel einer SQL-Anweisung verwendet.
Damit der SQL-Compiler eine Tabellenfunktion als Quelle von Zeilen erkennen kann, verlangt Snowflake, dass der Aufruf der Tabellenfunktion von Schlüsselwort TABLE()
umschlossen wird.
Die folgende Anweisung ruft z. B. eine Tabellenfunktion namens record_high_temperatures_for_date()
auf, die einen DATE-Wert als Argument erwartet:
SELECT city_name, temperature FROM TABLE(record_high_temperatures_for_date('2021-06-27'::DATE)) ORDER BY city_name;
Weitere Informationen zur Syntax von TABLE()
finden Sie unter Tabellenliterale.
Tabellenfunktionen können, wie Funktionen im Allgemeinen, bei jedem Aufruf null, ein oder mehrere Eingabeargumente akzeptieren. Jedes Argument muss ein skalarer Ausdruck sein.
Weitere Informationen zur Syntax von Tabellenfunktionsaufrufen finden Sie unter Syntax (unter diesem Thema).
Verwenden einer Tabelle als Eingabe einer Tabellenfunktion¶
Das Argument einer Tabellenfunktion kann ein Literal oder ein Ausdruck sein, z. B. eine Spalte aus einer Tabelle. Die folgende SELECT-Anweisung übergibt beispielsweise Werte aus einer Tabelle als Argumente an eine Tabellenfunktion:
CREATE OR REPLACE table dates_of_interest (event_date DATE);
INSERT INTO dates_of_interest (event_date) VALUES
('2021-06-21'::DATE),
('2022-06-21'::DATE);
CREATE OR REPLACE FUNCTION record_high_temperatures_for_date(d DATE)
RETURNS TABLE (event_date DATE, city VARCHAR, temperature NUMBER)
as
$$
SELECT d, 'New York', 65.0
UNION ALL
SELECT d, 'Los Angeles', 69.0
$$;
SELECT
doi.event_date as "Date",
record_temperatures.city,
record_temperatures.temperature
FROM dates_of_interest AS doi,
TABLE(record_high_temperatures_for_date(doi.event_date)) AS record_temperatures
ORDER BY doi.event_date, city;
+------------+-------------+-------------+
| Date | CITY | TEMPERATURE |
|------------+-------------+-------------|
| 2021-06-21 | Los Angeles | 69 |
| 2021-06-21 | New York | 65 |
| 2022-06-21 | Los Angeles | 69 |
| 2022-06-21 | New York | 65 |
+------------+-------------+-------------+
Die Argumente einer Tabellenfunktion können aus anderen tabellenähnlichen Quellen stammen, einschließlich Ansichten und anderen Tabellenfunktionen.
Liste der systemdefinierten Tabellenfunktionen¶
Snowflake stellt die folgenden systemdefinierten Tabellenfunktionen bereit:
Unterkategorie |
Funktion |
Anmerkungen |
---|---|---|
Laden von Daten |
Weitere Informationen dazu finden Sie unter Daten in Snowflake laden. |
|
Datengenerierung |
||
Datenkonvertierung |
||
ML-gestützte Analyse |
Weitere Informationen dazu finden Sie unter ML-gestützte Snowflake Cortex-Funktionen. |
|
Objektmodellierung |
||
Semistrukturierte Abfragen |
Weitere Informationen dazu finden Sie unter Abfragen von semistrukturierten Daten. |
|
Abfrageergebnisse |
Kann verwendet werden, um SQL-Operationen bei der Ausgabe einer anderen SQL-Operation auszuführen (z. B. SHOW) |
|
Query Profile |
||
Verlaufs- und Nutzungsinformationen |
||
Benutzeranmeldung
|
||
Abfragen
|
||
Weitere Informationen dazu finden Sie unter Verwenden des Query Acceleration Service. |
||
Warehouse- und Speichernutzung
|
||
Sicherheit auf Spaltenebene & auf Zeilenebene
|
||
Objekt-Tagging
|
Information Schema-Tabellenfunktion |
|
Information Schema-Tabellenfunktion |
||
Account Usage-Tabellenfunktionen |
||
Kontoreplikation
|
Weitere Informationen dazu finden Sie unter Einführung in Replikation und Failover über mehrere Konten. |
|
REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB |
||
Datenbankreplikation
|
Weitere Informationen dazu finden Sie unter Replizieren von Datenbanken über mehrere Konten. |
|
DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB |
||
Laden von Daten und Datentransfer
|
||
Daten-Clustering (innerhalb von Tabellen)
|
Weitere Informationen dazu finden Sie unter Automatic Clustering. |
|
Dynamische Tabellen
|
Weitere Informationen dazu finden Sie unter Allgemeine Informationen zur Verwendung von dynamischen Tabellen. |
|
Externe Funktionen
|
Weitere Informationen dazu finden Sie unter Schreiben von externen Funktionen. |
|
Externe Tabellen
|
Weitere Informationen dazu finden Sie unter Verwenden von externen Tabellen. |
|
Verwaltung materialisierter Ansichten
|
Weitere Informationen dazu finden Sie unter Verwenden von materialisierten Ansichten. |
|
Benachrichtigungen
|
Weitere Informationen dazu finden Sie unter Senden von E-Mail-Benachrichtigungen. |
|
SCIM-Verwaltung
|
Weitere Informationen dazu finden Sie unter Überwachen mit SCIM. |
|
Verwaltung der Suchoptimierung
|
Weitere Informationen dazu finden Sie unter Suchoptimierungsdienst. |
|
Streams
|
Weitere Informationen dazu finden Sie unter Änderungsnachverfolgung mit Tabellenstreams. |
|
Aufgaben
|
Weitere Informationen dazu finden Sie unter Geplante Ausführen von SQL-Anweisungen mithilfe von Aufgaben. |
|
Netzwerkregeln |
Information Schema-Tabellenfunktion Weitere Details dazu finden Sie unter Netzwerkregeln. |
Syntax¶
SELECT ...
FROM [ <input_table> [ [AS] <alias_1> ] ,
[ LATERAL ]
]
TABLE( <table_function>( [ <arg_1> [, ... ] ] ) ) [ [ AS ] <alias_2> ];
Informationen zur funktionsspezifischen Syntax finden Sie in der Dokumentation zu den einzelnen systemdefinierten Tabellenfunktionen.
Nutzungshinweise¶
Tabellenfunktionen können mit dem LATERAL-Konstrukt auch auf einen Satz von Zeilen angewendet werden.
Um die Verwendung von Tabellenausdrücken zu ermöglichen, unterstützt Snowflake die ANSI/ISO-Standardsyntax für Tabellenausdrücke in der FROM-Klausel von Abfragen und Unterabfragen. Diese Syntax wird verwendet, um anzugeben, dass ein Ausdruck eine Sammlung von Zeilen anstelle einer einzelnen Zeile zurückgibt.
Die ANSI/ISO-Syntax ist nur in der FROM-Klausel der SELECT-Liste gültig. Sie können diese Schlüsselwörter und Klammern in einer Spezifikation für eine Unterabfrage einer Sammlung in keinem anderen Kontext weglassen.