Dynamische Tabellen manuell aktualisieren

Manuelle Aktualisierung von dynamischen Tabellen bei aktiviertem Scheduler

Sie können eine dynamische Tabelle manuell aktualisieren, um die neuesten Daten zu enthalten, ohne auf die nächste geplante Aktualisierung warten zu müssen. Dies ist nützlich für einmalige Aktualisierungen oder wenn eine Tabelle eine große Zielverzögerung hat und die nächste Aktualisierung viel später erfolgt.

Tipp

Vermeiden Sie manuelle Aktualisierungen dynamischer Tabellen mit nachgelagerten dynamischen Tabellen, von denen erwartet wird, dass sie gemäß der Zielverzögerung aktualisiert werden. Diese Art von manuellen Aktualisierungen kann dazu führen, dass geplante Aktualisierungen übersprungen werden und die Aktualisierung nachgelagerter Tabellen verhindert wird.

Verwenden Sie zum manuellen Aktualisieren den Befehl ALTER DYNAMIC TABLE … REFRESH oder Snowsight, wie in den folgenden Schritten gezeigt:

ALTER DYNAMIC TABLE my_dynamic_table REFRESH

Für Situationen, die einen genauen Zeitpunkt für die Aktualisierung erfordern, wie z. B. um Aktualisierungen an Zeitplänen des externen Systems oder an Fenstern für die Batchverarbeitung auszurichten, können Sie eine Aufgabe mit einem CRON-Ausdruck verwenden, um die Aktualisierung auszulösen.

Beispiel:

-- Create the task
CREATE TASK my_dt_refresh_task
  WAREHOUSE = my_wh
  SCHEDULE = 'USING CRON 0 0 * * * America/Los_Angeles' -- Example: daily at midnight PST
  COMMENT = 'Daily 5pm PT manual refresh of my_dynamic_table'
  AS
    ALTER DYNAMIC TABLE my_dynamic_table REFRESH;

-- Enable the task
ALTER TASK my_dt_refresh_task RESUME;

-- Show the task
SHOW TASKS LIKE 'my_dt_refresh_task';
+------------+-----------------+-------------------------------------+---------------+-------------+--------------+-------------------------------------------------+-----------|-------------------------------------------+------------------+---------+----------------------------------------------+-----------+-----------------------------+-------------------+-------------------------------|-------------------+-----------------+--------+---------------------+-----------------------+---------------------+-----------------+----------------------------+-----------------+
| CREATED_ON | NAME            | ID                                  | DATABASE_NAME | SCHEMA_NAME | OWNER        | COMMENT                                         | WAREHOUSE | SCHEDULE                                  | [ ] PREDECESSORS | STATE   | DEFINITION                                   | CONDITION | ALLOW_OVERLAPPING_EXECUTION | ERROR_INTEGRATION | LAST_COMMITTED_ON             | LAST_SUSPENDED_ON | OWNER_ROLE_TYPE | CONFIG | TASK_RELATIONS      | LAST_SUSPENDED_REASON | SUCCESS_INTEGRATION | SCHEDULING_MODE | TARGET_COMPLETION_INTERVAL | EXECUTE_AS_USER |
|------------+-----------------+-------------------------------------+---------------+-------------+--------------+-------------------------------------------------+-----------+-------------------------------------------+------------------+---------+----------------------------------------------+-----------+-----------------------------+-------------------+-------------------------------+-------------------+-----------------+--------+---------------------+-----------------------+---------------------+-----------------+----------------------------+-----------------|
| 2025-10-02 | DT_REFRESH_TASK | 01bf6f0d-690f-f373-0000-000000025e3d| mydb          | my_schema   | ACCOUNTADMIN | Daily 5pm PT manual refresh of my_dynamic_table | mywh      | USING CRON 0 17 * * * America/Los_Angeles | []               | Started | ALTER DYNAMIC TABLE my_dynamic_table REFRESH | null      | false                       | null              | 2025-10-02 05:08:52.897 +0000 | null              | ROLE            | null   | {"Predecessors":[]} | null                  | null                | null            | null                       | null            |
+------------+-----------------+-------------------------------------+---------------+-------------+--------------+-------------------------------------------------+-----------|-------------------------------------------+------------------+---------+----------------------------------------------+-----------+-----------------------------+-------------------+-------------------------------|-------------------+-----------------+--------+---------------------+-----------------------+---------------------+-----------------+----------------------------+-----------------+

In den meisten Fällen empfiehlt Snowflake die Verwendung von Zielverzögerungen, die die Aktualisierungshäufigkeit optimieren und die Kosten im Vergleich zu festen CRON-Zeitplänen senken können, die unnötigerweise ausgeführt werden könnten.

Manuelle Aktualisierung von dynamischen Tabellen bei deaktiviertem Scheduler

Dynamische Tabellen, bei denen das SCHEDULER-Attribut auf DISABLE gesetzt ist, können nur manuell aktualisiert werden.

Dieser Typ von manueller Aktualisierung aktualisiert nur diese dynamische Tabelle. Eine solche Aktualisierung wirkt sich nicht kaskadenartig auf vorgelagerte dynamische Tabellen aus, unabhängig von ihrem Scheduler-Status.

In der DYNAMIC_TABLE_REFRESH_HISTORY-Ausgabe lautet der REFRESH_TRIGGER-Wert für diese Aktualisierungen MANUAL. Es werden keine SCHEDULED-Einträge für dynamische Tabellen generiert, wenn SCHEDULER auf DISABLE gesetzt ist.

Dieses Verhalten ermöglicht es externen Orchestratoren, wie z. B. dbt, eine manuelle Aktualisierung pro dynamischer Tabelle auszuführen, ohne vorgelagerte Aktualisierungen auszulösen.

Um den Scheduler zu deaktivieren und dann eine dynamische Tabelle manuell zu aktualisieren, verwenden Sie den ALTER DYNAMIC TABLE-Befehl wie in den folgenden Schritten gezeigt:

  1. Deaktivieren Sie den Scheduler:

    ALTER DYNAMIC TABLE my_dynamic_table SET SCHEDULER = DISABLE
    
  2. Aktualisieren Sie die dynamische Tabelle manuell:

    ALTER DYNAMIC TABLE my_dynamic_table REFRESH