Dynamische Tabellen erstellen

Unter diesem Thema werden die wichtigsten Konzepte zur Erstellung dynamischer Tabellen erläutert.

Stellen Sie vor Beginn sicher, dass Sie über die Berechtigungen für das Erstellen dynamischer Tabellen verfügen und dass für alle von der Abfrage dynamischer Tabellen verwendeten Objekte die Änderungsverfolgung aktiviert ist.

Für das Erstellen dynamischer Tabellen können einige Einschränkungen gelten. Eine vollständige Liste finden Sie unter Beschränkungen für dynamische Tabellen.

Änderungsverfolgung aktivieren

Wenn beim Erstellen einer dynamischen Tabelle mit inkrementellem Aktualisierungsmodus die Änderungsverfolgung für die abgefragten Tabellen noch nicht aktiviert ist, versucht Snowflake automatisch, die Änderungsverfolgung für sie zu aktivieren. Um inkrementelle Aktualisierungen zu unterstützen, muss die Änderungsverfolgung mit Nicht-Null-Time Travel-Aufbewahrungsfrist für alle zugrunde liegenden Objekte, die von einer dynamischen Tabelle verwendet werden, aktiviert sein.

Wenn sich die Basisobjekte ändern, ändert sich auch die dynamische Tabelle. Wenn Sie ein Basisobjekt neu erstellen, müssen Sie die Änderungsverfolgung wieder aktivieren.

Bemerkung

Snowflake versucht nicht automatisch, die Änderungsverfolgung bei dynamischen Tabellen zu aktivieren, die im Modus der vollständigen Aktualisierung erstellt wurden.

Um die Änderungsverfolgung für ein bestimmtes Datenbankobjekt zu aktivieren, verwenden Sie ALTER TABLE, ALTER VIEW und ähnliche Befehle für dieses Objekt. Der Benutzer, der die dynamische Tabelle erstellt, muss die OWNERSHIP-Berechtigungen haben, um die Änderungsverfolgung für alle zugrunde liegenden Objekte zu aktivieren.

Um zu prüfen, ob die Änderungsverfolgung aktiviert ist, verwenden Sie SHOW VIEWS, SHOW TABLES und ähnliche Befehle für die zugrunde liegenden Objekte, und untersuchen Sie die Spalte change_tracking.

Syntax für das Erstellen dynamischer Tabellen

Suppose that you want to create a dynamic table named product that contains the product_id and product_name columns from the table named staging_table, and you decide:

  • You want the data in the product table to be at most 20 minutes behind the data in staging_table.

  • Sie möchten die Computeressourcen des Warehouses mywh für die Aktualisierung verwenden.

  • Sie möchten, dass der Aktualisierungsmodus automatisch ausgewählt wird.

  • Sie möchten, dass die dynamische Tabelle bei der Erstellung synchron aktualisiert wird.

  • Sie möchten, dass der Aktualisierungstyp automatisch ausgewählt wird und dass die dynamische Tabelle bei der Erstellung synchron aktualisiert wird.

Zum Erstellen der dynamischen Tabelle führen Sie die folgende SQL-Anweisung CREATE DYNAMIC TABLE aus:

CREATE OR REPLACE DYNAMIC TABLE product
  TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  REFRESH_MODE = auto
  INITIALIZE = on_create
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

Eine vollständige Liste der Parameter und der Syntaxvarianten finden Sie unter CREATE DYNAMIC TABLE.

Best Practices für das Erstellen dynamischer Tabellen

Pipelines dynamischer Tabellen verketten

Wenn Sie eine neue dynamische Tabelle definieren, sollten Sie keine große dynamische Tabelle mit vielen verschachtelten Anweisungen definieren, sondern stattdessen kleine dynamische Tabellen mit Pipelines verwenden.

Sie können eine dynamische Tabelle einrichten, um andere dynamische Tabellen abzufragen. Stellen Sie sich zum Beispiel ein Szenario vor, in dem Ihre Datenpipeline Daten aus einem Stagingbereich extrahiert, um verschiedene Dimensionstabellen zu aktualisieren (z. B. customer, product, date und time). Außerdem aktualisiert Ihre Pipeline eine aggregierte Tabelle sales, die auf den Informationen aus diesen Dimensionstabellen basiert. Indem Sie die Dimensionstabellen so konfigurieren, dass sie die Staging-Tabelle abfragen, und die aggregierte Tabelle sales so, dass sie die Dimensionstabellen abfragt, erzeugen Sie einen Kaskadeneffekt, ähnlich wie bei einem Task-Graphen.

In diesem Setup wird die Aktualisierung der aggregierten Tabelle sales erst ausgeführt, nachdem die Aktualisierungen der Dimensionstabellen erfolgreich abgeschlossen wurden. Dies stellt die Konsistenz der Daten und die Einhaltung der Verzögerungsziele sicher. Durch einen automatischen Aktualisierungsprozess lösen alle Änderungen in den Quelltabellen zu den entsprechenden Zeitpunkten Aktualisierungen in allen abhängigen Tabellen aus.

Vergleich zwischen Task-Graphen und DAGs dynamischer Tabellen

Dynamische „Controller“-Tabelle für komplexe Task-Graphen verwenden

Wenn Sie einen komplexen Graphen von dynamischen Tabellen mit vielen Wurzeln und Blättern haben und mit einem einzigen Befehl Operationen (z. B. Änderung der Verzögerung, manuelle Aktualisierung, Aussetzung) am gesamten Task-Graphen ausführen möchten, gehen Sie wie folgt vor:

  1. Setzen Sie den Wert für TARGET_LAG für alle Ihre dynamischen Tabellen auf DOWNSTREAM.

  2. Erstellen Sie eine dynamische „Controller“-Tabelle, die alle Blätter in Ihrem Task-Graphen ausliest. Um sicherzustellen, dass dieser Controller keine Ressourcen verbraucht, gehen Sie wie folgt vor:

    CREATE DYNAMIC TABLE controller
      TARGET_LAG = <target_lag>
      WAREHOUSE = <warehouse>
      AS
        SELECT 1 A FROM <leaf1>, …, <leafN> LIMIT 0;
    
    Copy
  3. Verwenden Sie den Controller, um den gesamten Task-Graphen zu steuern. Beispiel:

  • Legen Sie eine neue Zielverzögerung für den Task-Graphen fest.

    ALTER DYNAMIC TABLE controller SET
      TARGET_LAG = <new_target_lag>;
    
    Copy
  • Aktualisieren Sie den Task-Graphen manuell.

    ALTER DYNAMIC TABLE controller REFRESH;
    
    Copy

Allgemeine Informationen zum Klonen der Pipelines von dynamischen Tabellen

Klonen Sie alle Elemente einer Pipeline für dynamische Tabellen mit demselben Klon-Befehl, um Neuinitialisierungen Ihrer Pipeline zu vermeiden. Sie können dies tun, indem Sie alle Elemente der Pipeline (z. B. Basistabellen, Ansichten und dynamische Tabellen) in demselben Schema oder derselben Datenbank konsolidieren.

Verwenden Sie transiente dynamische Tabellen, um die Speicherkosten zu reduzieren

Transiente dynamische Tabellen halten Daten zuverlässig über die Zeit aufrecht und unterstützen Time Travel innerhalb der Datenaufbewahrungsfrist, bewahren aber keine Daten über die Fail-safe-Frist hinaus auf. Standardmäßig werden die dynamischen Tabellendaten sieben Tage lang im Fail-safe-Speicher aufbewahrt.

Bei dynamischen Tabellen mit hohem Aktualisierungsdurchsatz kann dies den Speicherverbrauch erheblich erhöhen. Daher sollten Sie eine dynamische Tabelle nur dann zu einer transienten Tabelle machen, wenn ihre Daten nicht dasselbe Maß an Datenschutz und Wiederherstellung benötigen, das permanente Tabellen bieten.

Mit der Anweisung CREATE DYNAMIC TABLE können Sie eine transiente dynamische Tabelle erstellen oder bestehende dynamische Tabellen in transiente dynamische Tabellen klonen.

Probleme beim Erstellen dynamischer Tabellen lösen

Wenn Sie eine dynamische Tabelle erstellen, erfolgt die erste Aktualisierung entweder nach einem Zeitplan (ON_SCHEDULE) oder sofort bei der Erstellung (ON_CREATE). Die erstmalige Datenbefüllung oder Initialisierung hängt davon ab, wann diese erste Aktualisierung stattfindet. Bei ON_CREATE kann die Initialisierung zum Beispiel länger dauern, wenn sie Aktualisierungen von vorgelagerten dynamischen Tabellen auslöst.

Die Initialisierung kann einige Zeit dauern, je nachdem, wie viele Daten gescannt werden. Um den Fortschritt zu sehen, gehen Sie wie folgt vor:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Monitoring » Query History aus.

  3. In der Dropdown-Liste Filters geben Sie CREATE DYNAMIC TABLE als SQL Text-Filter und Ihren Warehouse-Namen als Warehouse-Filter ein.

  4. Wählen Sie unter SQL text die Abfrage mit Ihrer dynamischen Tabelle aus, und verwenden Sie die Registerkarten Query Details und Query Profile, um den Fortschritt zu verfolgen.