Atualize manualmente as tabelas dinâmicas

Atualização manual de tabelas dinâmicas com o agendador ativado

É possível atualizar manualmente uma tabela dinâmica para incluir os dados mais recentes sem esperar pela próxima atualização agendada. Isso é útil para atualizações únicas ou quando uma tabela tem um grande atraso de destino e a próxima atualização ocorre muito mais tarde.

Dica

Evite atualizações manuais frequentes em tabelas dinâmicas com tabelas dinâmicas downstream que devem ser atualizadas de acordo com o atraso no destino. Esses tipos de atualizações manuais podem fazer com que as atualizações agendadas ignorem e impeçam que as tabelas downstream sejam atualizadas.

Para atualizar manualmente, use o comando ALTER DYNAMIC TABLE … REFRESH ou Snowsight, como mostrado nas etapas a seguir:

ALTER DYNAMIC TABLE my_dynamic_table REFRESH

Para situações que exigem um tempo de atualização preciso, como alinhamento de atualizações com cronogramas de sistema externo ou janelas de processamento em lote, você pode usar uma tarefa com uma expressão CRON para acionar a atualização.

Por exemplo:

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

Para a maioria dos casos, a Snowflake recomenda usar o lag no destino, que otimiza a frequência de atualização e pode reduzir custos em comparação com cronogramas CRON fixos que podem ser executados desnecessariamente.

Atualização manual de tabelas dinâmicas com o agendador desativado

Tabelas dinâmicas com o atributo SCHEDULER definido como DISABLE só podem ser atualizadas manualmente.

Esse tipo de atualização manual atualiza apenas essa tabela dinâmica. Ele não se propaga para nenhuma tabela dinâmica upstream, independentemente do estado do agendador.

Na saída DYNAMIC_TABLE_REFRESH_HISTORY, o valor REFRESH_TRIGGER para essas atualizações é MANUAL. Nenhuma entrada SCHEDULED é gerada para tabelas dinâmicas com SCHEDULER definido como DISABLE.

Esse comportamento permite que orquestradores externos, como o dbt, emitam uma atualização manual por tabela dinâmica sem acionar atualizações upstream.

Para desativar o agendador e, em seguida, atualizar manualmente uma tabela dinâmica, use o comando ALTER DYNAMIC TABLE conforme mostrado nas etapas a seguir:

  1. Desative o agendador:

    ALTER DYNAMIC TABLE my_dynamic_table SET SCHEDULER = DISABLE
    
  2. Atualize manualmente a tabela dinâmica:

    ALTER DYNAMIC TABLE my_dynamic_table REFRESH