Actualiser manuellement les tables dynamiques

Actualisation manuelle des tables dynamiques avec le planificateur activé

Vous pouvez actualiser manuellement une table dynamique pour y inclure les données les plus récentes sans attendre la prochaine actualisation planifiée. Cela est utile pour les mises à jour uniques ou lorsqu’une table a une latence cible importante et que la prochaine actualisation a lieu beaucoup plus tard.

Astuce

Évitez les actualisations manuelles fréquentes sur les tables dynamiques avec des tables dynamiques en aval qui sont censées s’actualiser en fonction d’une latence cible. Ces types d’actualisations manuelles peuvent entraîner l’omission des actualisations planifiées et empêcher la mise à jour des tables en aval.

Pour effectuer une actualisation manuelle, utilisez la commande ALTER DYNAMIC TABLE … REFRESH ou l’Snowsight, comme montré dans les étapes suivantes :

ALTER DYNAMIC TABLE my_dynamic_table REFRESH

Pour les situations qui nécessitent un calendrier d’actualisation précis, telles que l’alignement des actualisations avec des planifications système externes ou des fenêtres de traitement par lots, vous pouvez utiliser une tâche avec une expression CRON pour déclencher l’actualisation.

Par exemple :

-- 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            |
+------------+-----------------+-------------------------------------+---------------+-------------+--------------+-------------------------------------------------+-----------|-------------------------------------------+------------------+---------+----------------------------------------------+-----------+-----------------------------+-------------------+-------------------------------|-------------------+-----------------+--------+---------------------+-----------------------+---------------------+-----------------+----------------------------+-----------------+

Dans la plupart des cas, Snowflake recommande d’utiliser la latence cible, qui optimise la fréquence d’actualisation et peut réduire les coûts par rapport aux planifications CRON fixes qui peuvent s’exécuter inutilement.

Actualisation manuelle des tables dynamiques avec le planificateur désactivé

Les tables dynamiques avec l’attribut SCHEDULER défini sur``DISABLE`` peuvent uniquement être actualisées manuellement.

Ce type d’actualisation manuelle n’actualise que cette table dynamique. Il ne se répercute pas sur les tables dynamiques en amont, quel que soit l’état de leur planificateur.

Dans la sortie DYNAMIC_TABLE_REFRESH_HISTORY, la valeur REFRESH_TRIGGER de ces actualisations est MANUAL. Aucune entrée SCHEDULED n’est générée pour les tables dynamiques avec un SCHEDULER défini sur DISABLE.

Ce comportement permet aux orchestrateurs externes, tels que dbt, d’émettre une seule actualisation manuelle par table dynamique sans déclencher d’actualisations en amont.

Pour désactiver le planificateur et actualiser manuellement une table dynamique, utilisez la commande ALTER DYNAMIC TABLE comme indiqué dans les étapes suivantes :

  1. Désactiver le planificateur :

    ALTER DYNAMIC TABLE my_dynamic_table SET SCHEDULER = DISABLE
    
  2. Actualiser manuellement la table dynamique :

    ALTER DYNAMIC TABLE my_dynamic_table REFRESH