Bekannte Einschränkungen für dynamische Tabellen

Unter diesem Thema werden die Einschränkungen der folgenden Features für dynamische Tabellen beschrieben:

Allgemeine Einschränkungen

Für die Verwendung dynamischer Tabellen gelten die folgenden allgemeinen Einschränkungen:

  • Ein einzelnes Konto kann maximal 4.000 dynamische Tabellen enthalten.

  • Für die Definition einer dynamischen Tabelle:

    • Sie können nicht mehr als 100 Tabellen abfragen.

    • Sie können nicht mehr als 100 dynamische Tabellen abfragen.

  • Sie können Daten aus einer dynamischen Tabelle nicht abschneiden.

  • Sie können keine temporäre dynamische Tabelle erstellen.

  • Wenn Sie eine dynamische Tabelle zum Aufnehmen freigegebener Daten verwenden, kann die Abfrage kein SELECT auf einer freigegebenen dynamischen Tabelle oder einer freigegebenen sicheren Ansicht ausführen, die eine vorgelagerte dynamische Tabelle referenziert.

  • Sie können keine Sekundärrollen mit dynamischen Tabellen verwenden, da die Aktualisierungen dynamischer Tabellen als ihre Eigentümerrolle fungieren. Weitere Informationen dazu finden Sie unter Durchsetzungsmodell mit Primärrolle und Sekundärrollen.

  • Sie können den Objektparameter DATA_RETENTION_TIME_IN_DAYS in Ihren Quelltabellen nicht auf Null festlegen.

  • Sie können dynamische SQL (z. B. Sitzungsvariablen oder ungebundene Variablen von anonymen Blöcken) nicht in der Definition der dynamischen Tabelle verwenden.

  • In der Definition einer dynamischen Tabelle müssen SELECT-Blöcke, die aus benutzerdefinierten Tabellenfunktionen (UDTF) lesen, explizit Spalten angeben und können * nicht verwenden.

  • Dynamische Tabellen können veralten, wenn sie nicht im Zeitraum von MAX_DATA_EXTENSION_TIME_IN_DAYS der Eingabetabellen aufgefrischt werden. Sobald sie veraltet sind, müssen die dynamischen Tabellen neu erstellt werden.

  • Dynamische Tabellen unterstützen derzeit keine Änderungsverfolgung in der Ansicht ACCESS_HISTORY. Das bedeutet, dass Abfragen und Operationen, die an dynamischen Tabellen durchgeführt werden, nicht für Auditing- oder Überwachungszwecke in der ACCESS_HISTORY von Snowflake erfasst werden.

Unterstützte Datentypen

Dynamische Tabellen unterstützen alle Snowflake-SQL-Datentypen sowohl für die inkrementelle als auch für die vollständige Aktualisierung, außer:

  • Strukturierte Datentypen

  • Geodatentypen (nur vollständige Aktualisierung).

Einschränkungen bei Abfragekonstrukten

Die folgenden Konstrukte werden derzeit in der Abfrage für eine dynamische Tabelle nicht unterstützt. Wenn Sie diese in der Abfrage angeben, tritt ein Fehler auf:

  • Externe Funktionen.

  • Sequenzen.

  • Funktionen, die auf CURRENT_USER angewiesen sind. Aktualisierungen dynamischer Tabellen fungieren als ihre Eigentümerrolle mit einem speziellen SYSTEM-Benutzer.

  • Quellen, zu denen Verzeichnistabellen, externe Tabellen, Streams und materialisierte Ansichten gehören.

  • Ansichten auf dynamische Tabellen oder andere nicht unterstützte Objekte

  • Benutzerdefinierte Funktionen für Tabellen (UDTF), die in SQL geschrieben sind.

  • Benutzerdefinierte Funktionen (UDF), die in SQL geschrieben sind und eine Unterabfrage enthalten (z.B. eine Anweisung SELECT).

  • PIVOT- und UNPIVOT-Konstrukte werden bei der inkrementellen oder vollständigen Aktualisierung nicht unterstützt.

  • SAMPLE / TABLESAMPLE-Konstrukte werden bei der inkrementellen oder vollständigen Aktualisierung dynamischer Tabellen nicht unterstützt.

Unterstützung von Feature-übergreifenden Interaktionen

Die folgenden Feature-übergreifenden Interaktionen werden nicht unterstützt:

  • Verwenden des Abfragebeschleunigungsdienstes (Query Acceleration Service, QAS) für Aktualisierungen dynamischer Tabellen

  • Maskierungsrichtlinien mit Datenbankrollen auf gemeinsamen Tabellen.

Die folgenden Einschränkungen gelten für Feature-übergreifende Interaktionen:

  • Dynamische Tabellen und Basistabellen, die sich in unterschiedlichen Failover-Gruppen befinden, führen dazu, dass die Replikation fehlschlägt.

Unterstützung von inkrementellen Aktualisierungen

Dieser Abschnitt beschreibt die Ausdrücke, Klauseln und Funktionen, die derzeit für inkrementelle Aktualisierungen dynamischer Tabellen nicht unterstützt werden. Wenn eine Abfrage diese verwendet, führt der automatische Aktualisierungsprozess eine vollständige Aktualisierung aus, die mehr Credits verbrauchen kann. Siehe Feststellen, ob inkrementelle oder vollständige Aktualisierung verwendet wird.

Nicht deterministische Funktionen werden bei inkrementellen Aktualisierungen nicht unterstützt, aber einige nicht deterministische Funktionen werden bei vollständigen Aktualisierungen unterstützt.

Wenn Sie eine dynamische Tabelle erstellen, ist der Standardwert für den Aktualisierungsmodus AUTO, der eine inkrementelle Aktualisierung der dynamischen Tabelle vorsieht. Wenn die CREATE DYNAMIC TABLE-Anweisung keine inkrementelle Aktualisierung unterstützt, wird automatisch die vollständige Aktualisierung als Aktualisierungsmodus gewählt.

Um den für Ihren Anwendungsfall am besten geeigneten Modus zu ermitteln, experimentieren Sie mit Aktualisierungsmodi und automatischen Empfehlungen. Um eine konsistente Verhaltensweise in allen Snowflake-Releases zu gewährleisten, legen Sie Aktualisierungsmodus aller dynamischen Tabellen explizit fest. Wenn Sie z. B. möchten, dass Ihre dynamischen Tabellen nur inkrementell aktualisiert werden, müssen Sie den Aktualisierungsmodus bei der Erstellung ausdrücklich auf INCREMENTAL festlegen. Weitere Informationen dazu finden Sie unter Aktualisierungsmodus für alle dynamischen Tabellen in der Produktionsumgebung festlegen.

Informationen zum Verifizieren des Aktualisierungsmodus für Ihre dynamischen Tabellen finden Sie unter Aktualisierungsmodus von dynamischen Tabellen anzeigen.

Nicht unterstützte Konstrukte, Operatoren und Funktionen

Dynamische Tabellen unterstützen derzeit keine inkrementelle Aktualisierung bei einigen Konstrukten, Operatoren und Funktionen. Wenn Sie in der Abfrage Folgendes angeben, wird eine vollständige Aktualisierung der dynamischen Tabelle ausgeführt:

  • Mengenoperatoren:

    • UNION, MINUS, EXCEPT, INTERSECT.

  • Die folgenden Verwendungen von UNION [ ALL ]:

    • UNION ALL einer Tabelle mit sich selbst oder mit einem Klon von sich selbst.

    • UNION ALL zwischen einem GROUP BY oder DISTINCT und einem anderen GROUP BY oder DISTINCT.

  • Alle Unterabfrage-Operatoren.

  • Die folgenden Muster von Outer Joins (links, rechts oder voll):

    • Outer Joins, bei denen beide Seiten dieselbe Tabelle sind.

    • Outer Joins, bei denen beide Seiten eine Unterabfrage mit GROUP BY-Klauseln sind.

    • Outer Joins mit Prädikaten, die keine Gleichheitsprädikate sind.

  • Die folgenden Verwendungen von Fensterfunktionen:

    • Mehrere Fensterfunktionen in derselben Definition einer dynamischen Tabelle, wobei die PARTITION BY-Klauseln entweder nicht identisch sind oder in separaten Abfrageblöcken erscheinen.

    • Verwenden der Funktionen PERCENT_RANK, DENSE_RANK, RANK mit gleitenden Fensterrahmen.

    • Verwendung von ANY_VALUE, da es eine nicht deterministische Funktion ist.

  • Die folgenden Verwendungen von benutzerdefinierte Funktionen (UDF):

    • UDFs und UDTFs, die in Python, Java, Scala oder Javascript geschrieben sind und Angabe des Parameters VOLATILE.

    • SQL UDFs, die Unterabfragen enthalten.

  • LATERAL Joins, außer bei der Verwendung von LATERAL mit FLATTEN().

  • ML oder LLM-Funktionen.

Zusätzliche Einschränkungen bei inkrementellen Aktualisierungen

Maskierungs- und Zeilenzugriffsrichtlinien

Maskierungs- oder Zeilenzugriffsrichtlinien haben keinen Einfluss auf den Aktualisierungsmodus. Allerdings können Richtlinien, die auf Quelltabellen angewendet werden, den Aktualisierungsmodus beeinflussen:

  • Die inkrementelle Aktualisierung wird unterstützt, wenn die Richtlinien für die Quelltabellen die Funktion CURRENT_ROLE verwenden.

  • Die inkrementelle Aktualisierung wird nicht unterstützt, wenn die Richtlinien für die Quelltabellen andere Funktionen, INFORMATION_SCHEMA-Ansichten verwenden oder eine Tabelle abfragen (z. B. eine Zuordnungstabelle).

Replikation

Replizierte dynamische Tabellen mit inkrementeller Aktualisierung werden nach dem Failover neu initialisiert, bevor die inkrementelle Aktualisierung fortgesetzt wird.

Weitere Informationen dazu finden Sie unter Replikation und dynamische Tabellen.

Klonen

Geklonte inkrementelle dynamische Tabellen müssen bei ihrer ersten Aktualisierung nach der Erstellung möglicherweise neu initialisiert werden.

Wenn eine dynamische Tabelle von einer anderen dynamischen Tabelle mit gelöschten Basistabellen geklont wird, wird das Klonen ausgesetzt und kann nicht wieder aufgenommen oder aktualisiert werden.