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, von denen jede eine oder mehrere Spalten enthalten kann.

Folgende Funktionen auf den Tabellen wären beispielsweise geeignet:

  • Eine Funktion, die ein Datum als Argument akzeptiert und eine Menge von Zeilen zurückgibt, in denen Orte aufgelistet sind, die an diesem Tag Rekordtemperaturen aufwiesen. (Mehrere Orte könnten am selben Tag Rekordtemperaturen erreichen.)

  • 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).

In jedem dieser Beispiele könnte die Funktion null Zeilen zurückgeben (z. B. wenn es an diesem Tag keine Rekordtemperaturen gab), eine Zeile (wenn ein Ort an diesem Tag eine Rekordtemperatur erzielte) oder mehrere Zeilen (wenn viele Orte Rekordtemperaturen erreichten).

Jede Eingabezeile einer Tabellenfunktion besteht aus null, einem oder mehreren Argumenten. Jedes Argument muss ein skalarer Ausdruck sein.

Eine Tabellenfunktion wird in die FROM-Klausel einer SQL-Anweisung aufgenommen. Der Aufruf der Tabellenfunktion ist normalerweise in TABLE() eingeschlossen. Die folgende Anweisung ruft z. B. eine Tabellenfunktion namens record_high_temperatures() 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;

Tabellenfunktionen können in zwei Unterkategorien eingeteilt werden:

  • 1:N-Funktionen

  • M:N-Funktionen

In einer 1:N-Funktion generiert jede Eingabezeile n Ausgabezeilen (wobei N null, eins oder mehr sein kann). Die obigen Beispiele sind 1:N-Funktionen. Beispielsweise wird jedes Mal, wenn die Funktion RECORD_HIGH_TEMPERATURES_FOR_DATE() aufgerufen und ein Datum übergeben wird, von der Funktion eine Menge von Zeilen zurückgegeben. Die Zeilen für jedes Datum sind unabhängig von den Zeilen für jedes andere Datum. Die meisten Tabellenfunktionen sind 1:N-Funktionen.

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. Sie können zum Beispiel eine Funktion schreiben, die den gleitenden Durchschnitt einer Menge von M Zeilen zurückgibt. Angenommen, Sie möchten den 10-tägigen gleitenden Durchschnitt eines Aktienkurses wissen. Außerdem angenommen, dass Sie möchten, dass der gleitende 10-Tage-Durchschnitt erst dann Ausgabezeilen generiert, wenn die Funktion mindestens 10 Zeilen verarbeitet hat, und dass Sie nicht möchten, dass der Durchschnitt Zeilen aus verschiedenen Monaten verwendet. In diesem Beispiel würde die Funktion für Januar 31 Eingabezeilen haben (weil der Januar 31 Tage hat) und 22 Ausgabezeilen (die erste Ausgabezeile ist der 10. Januar und die letzte Ausgabezeile ist am 31. Januar). In diesem Beispiel variieren sowohl M als auch N, abhängig von der Länge des Monats.

Tabellenfunktionen können integriert oder benutzerdefiniert sein. Eingebaute Tabellenfunktionen sind in Liste der systemdefinierten Tabellenfunktionen aufgeführt. Informationen über benutzerdefinierte Funktionen, einschließlich benutzerdefinierter Tabellenfunktionen, finden Sie unter UDFs (Benutzerdefinierte Funktionen).

Tabellenfunktionen werden manchmal auch als „tabellarische Funktionen“ bezeichnet.

Unter diesem Thema:

Liste der systemdefinierten Tabellenfunktionen

Snowflake stellt die folgenden systemdefinierten Tabellenfunktionen bereit:

Unterkategorie

Funktion

Anmerkungen

Laden von Daten

INFER_SCHEMA

Weitere Informationen dazu finden Sie unter Laden von Daten in Snowflake.

VALIDATE

Datengenerierung

GENERATOR

Datenkonvertierung

SPLIT_TO_TABLE

STRTOK_SPLIT_TO_TABLE

Objektmodellierung

GET_OBJECT_REFERENCES

Semistrukturierte Abfragen

FLATTEN

Weitere Informationen dazu finden Sie unter Abfragen von semistrukturierten Daten.

Abfrageergebnisse

RESULT_SCAN

Kann verwendet werden, um SQL-Operationen bei der Ausgabe einer anderen SQL-Operation auszuführen (z. B. SHOW)

Verlaufs- und Nutzungsinformationen (Information Schema, Account Usage):

Benutzeranmeldung

LOGIN_HISTORY , LOGIN_HISTORY_BY_USER

Abfragen

QUERY_HISTORY , QUERY_HISTORY_BY_*

Warehouse- und Speichernutzung

DATABASE_STORAGE_USAGE_HISTORY

WAREHOUSE_LOAD_HISTORY

WAREHOUSE_METERING_HISTORY

STAGE_STORAGE_USAGE_HISTORY

Sicherheit auf Spaltenebene & auf Zeilenebene

POLICY_REFERENCES

Tags

TAG_REFERENCES TAG_REFERENCES_WITH_LINEAGE

Information Schema-Tabellenfunktion . Account Usage-Tabellenfunktion

Datenbankreplikation

DATABASE_REFRESH_HISTORY DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB REPLICATION_USAGE_HISTORY

Weitere Informationen dazu finden Sie unter Replizieren von Datenbanken über mehrere Konten.

Laden von Daten und Datenübertragung

COPY_HISTORY

DATA_TRANSFER_HISTORY

PIPE_USAGE_HISTORY

VALIDATE_PIPE_LOAD

Daten-Clustering (innerhalb von Tabellen)

AUTOMATIC_CLUSTERING_HISTORY

Weitere Informationen dazu finden Sie unter Automatic Clustering.

Externe Funktionen

EXTERNAL_FUNCTIONS_HISTORY

Weitere Informationen dazu finden Sie unter Externe Funktionen.

Externe Tabellen

AUTO_REFRESH_REGISTRATION_HISTORY

Weitere Informationen dazu finden Sie unter Verwenden von externen Tabellen.

EXTERNAL_TABLE_FILES

EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY

Verwaltung materialisierter Ansichten

MATERIALIZED_VIEW_REFRESH_HISTORY

Weitere Informationen dazu finden Sie unter Verwenden von materialisierten Ansichten.

SCIM-Verwaltung

REST_EVENT_HISTORY

Weitere Informationen dazu finden Sie unter Überwachen mit SCIM.

Verwaltung der Suchoptimierung

SEARCH_OPTIMIZATION_HISTORY

Weitere Informationen dazu finden Sie unter Verwenden des Suchoptimierungsdienstes.

Aufgabenverwaltung

TASK_DEPENDENTS

Weitere Informationen dazu finden Sie unter Ausführen von SQL-Anweisungen für einen Zeitplan mithilfe von Aufgaben.

TASK_HISTORY

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.