Como é feita a atualização de tabela dinâmica

O conteúdo da tabela dinâmica é baseado nos resultados de uma consulta específica. Quando os dados subjacentes nos quais a tabela dinâmica se baseia são alterados, a tabela é atualizada para refletir essas alterações. Essas atualizações são chamadas de atualização. Este processo é automatizado e envolve a análise da consulta que está subjacente à tabela.

Os tempos limite de atualização dinâmica da tabela são determinados pelo parâmetro STATEMENT_TIMEOUT_IN_SECONDS, definindo a duração máxima na conta ou no warehouse antes de ser cancelado automaticamente.

As seções a seguir explicam a atualização dinâmica da tabela com mais detalhes:

Tipos de atualização de tabela dinâmica

O processo de atualização da tabela dinâmica ocorre de duas maneiras:

  1. Atualização incremental: esse processo automatizado analisa a consulta da tabela dinâmica e calcula as alterações desde a última atualização. Em seguida, ele mescla essas alterações na tabela. Consulte Consultas suportadas na atualização incremental para obter detalhes sobre consultas suportadas.

  2. Atualização completa: quando o processo automatizado não consegue realizar uma atualização incremental, ele realiza uma atualização completa. Isso envolve a execução da consulta da tabela dinâmica e a substituição completa dos resultados materializados anteriores.

As construções usadas na consulta determinam se uma atualização incremental pode ser usada. Depois de criar uma tabela dinâmica, você pode monitorar a tabela para determinar se atualizações incrementais ou completas são usadas para atualizar essa tabela.

Compreensão da meta de atraso

A atualização dinâmica da tabela é acionada com base em como os dados podem estar desatualizados, ou o que é comumente referido como atraso ou meta de atraso.

A meta de atraso é especificada de duas maneiras:

  1. Medida do nível de atualização: define a quantidade máxima de tempo que o conteúdo da tabela dinâmica deve atrasar as atualizações nas tabelas de base.

    Especificado usando o parâmetro TARGET_LAG = { num { seconds | ... | days } ao alterar ou definir originalmente uma tabela dinâmica.

  2. DOWNSTREAM: especifica que a tabela dinâmica deve ser atualizada sob demanda quando outras tabelas dinâmicas que dependem dela precisarem ser atualizadas. As atualizações são inferidas de objetos de banco de dados a montante. As tabelas dinâmicas a jusante são atualizadas apenas quando exigidas pelos consumidores a montante.

Considere o seguinte exemplo em que a tabela dinâmica 2 (DT2) é definida com base na tabela dinâmica 1 (DT1). DT2 deve ler DT1 para materializar seu conteúdo. Além disso, um relatório consome dados do DT2 por meio de uma consulta.

Exemplo simples de duas tabelas dinâmicas, DT2 que é definida com base em DT1.

Os seguintes resultados são possíveis, dependendo de como cada tabela dinâmica especifica seu atraso:

Tabela dinâmica 1 (DT1)

Tabela dinâmica 2 (DT2)

Atualizar resultados

TARGET_LAG = DOWNSTREAM

TARGET_LAG = 10minutes

DT2 é atualizado no máximo a cada 10 minutos. DT1 obtém, ou infere, seu atraso de DT2 e é atualizado sempre que DT2 exigir atualizações.

TARGET_LAG = 10minutes

TARGET_LAG = DOWNSTREAM

Este cenário deve ser evitado. A consulta do relatório não receberá nenhum dado. DT2 não é atualizado porque nenhum DT foi criado em cima de DT2. Além disso, DT1 será atualizado com frequência.

TARGET_LAG = 5minutes

TARGET_LAG = 10minutes

DT2 é atualizado aproximadamente a cada 10 minutos com dados de DT1 ou seja, no máximo 5 minutos.

TARGET_LAG = DOWNSTREAM

TARGET_LAG = DOWNSTREAM

DT2 não é atualizado periodicamente porque DT1 não tem filhos a jusante com um atraso definido.

Consultas suportadas na atualização incremental

A tabela a seguir descreve as expressões, palavras-chave e cláusulas que atualmente oferecem suporte à atualização incremental. Para obter uma lista de consultas que não oferecem suporte à atualização incremental, consulte Limitações ao suporte para atualização incremental.

Palavra-chave/cláusula

Suporte para atualizações incrementais

WITH

Expressões de tabela comuns (CTE) que usam recursos compatíveis com atualização incremental na subconsulta.

Expressões em SELECT

Expressões, incluindo aquelas que usam funções internas determinísticas e funções imutáveis definidas pelo usuário.

FROM

Tabelas, exibições e outras tabelas dinâmicas de origem. Subconsultas fora das cláusulas FROM (por exemplo, WHERE EXISTS) não são suportadas.

OVER

Todas as funções de janela.

WHERE/HAVING/QUALIFY

Filtra com as mesmas expressões válidas em SELECT.

JOIN (e outras expressões para unir tabelas)

Os tipos de junção suportados para atualização incremental incluem junções internas, junções externas equivalentes e junções cruzadas. Você pode especificar qualquer número de tabelas na junção e as atualizações em todas as tabelas na junção serão refletidas nos resultados da consulta.

UNION ALL

Tabelas dinâmicas oferecem suporte a UNION ALL.

GROUP BY

Tabelas dinâmicas oferecem suporte a GROUP BY.

Importante

Se uma consulta usar expressões que não sejam compatíveis com a atualização incremental, o processo de atualização automatizada usará uma atualização completa, o que pode acarretar um custo adicional. Para determinar qual modo de atualização será usado, consulte Como determinar se é usada uma atualização incremental ou completa.

Substituir uma função definida pelo usuário IMMUTABLE (UDF) enquanto ela está em uso por uma tabela dinâmica que usa atualização incremental resulta em um comportamento indefinido nessa tabela. UDFs VOLATILE não são suportadas com atualização incremental.

Funções não determinísticas suportadas em atualização completa

As seguintes funções não determinísticas são suportadas em tabelas dinâmicas. Observe que essas funções são suportadas apenas para atualizações completas. Para obter uma lista do que não é compatível com atualização incremental, consulte Limitações ao suporte para atualização incremental.

Como os dados são atualizados quando as tabelas dinâmicas dependem de outras tabelas dinâmicas

Quando um atraso de tabela dinâmica é especificado como uma medida de tempo, o processo de atualização automatizado determina o planejamento para atualizações, com base nos tempos de atraso de destino das tabelas dinâmicas. O processo escolhe um cronograma que melhor atenda aos tempos da meta de atraso das tabelas.

Nota

A meta de atraso não é uma garantia. Em vez disso, é uma meta que o Snowflake tenta atingir. Os dados em tabelas dinâmicas são atualizados o mais próximo possível da meta de atraso. No entanto, a meta de atraso pode ser excedido devido a fatores como tamanho do warehouse, tamanho dos dados, complexidade da consulta e fatores semelhantes.

Para manter os dados consistentes nos casos em que uma tabela dinâmica depende de outra, o processo atualiza todas as tabelas dinâmicas em uma conta em horários compatíveis. O momento das atualizações menos frequentes coincide com o momento das atualizações mais frequentes.

Por exemplo, suponha que a tabela dinâmica A tenha uma meta de atraso de dois minutos e consulte a tabela dinâmica B que tenha uma meta de atraso de um minuto. O processo pode determinar que A deve ser atualizado a cada 96 segundos e B a cada 48 segundos. Como resultado, o processo pode aplicar o seguinte cronograma:

Ponto específico no tempo

Tabelas dinâmicas atualizadas

2022-12-01 00:00:00

A, B

2022-12-01 00:00:48

B

2022-12-01 00:01:36

A, B

2022-12-01 00:02:24

B

Isso significa que, a qualquer momento, ao consultar um conjunto de tabelas dinâmicas que dependem umas das outras, você está consultando o mesmo “instantâneo” dos dados nessas tabelas.

Observe que a meta de atraso de uma tabela dinâmica não pode ser menor que a meta de atraso das tabelas dinâmicas das quais ela depende. Por exemplo, suponha que você especifique o seguinte:

  • A tabela dinâmica A consulta as tabelas dinâmicas B e C.

  • Tabela dinâmica B tem uma meta de atraso de cinco minutos.

  • Tabela dinâmica C tem uma meta de atraso de um minuto.

Isso significa que o tempo da meta de atraso para A não deve ser inferior a cinco minutos (ou seja, não menor que o maior dos tempos de atraso para B e C).

Se você definir o atraso de A para cinco minutos, o processo configurará um cronograma de atualização com estes objetivos:

  • Atualize C com frequência suficiente para manter o atraso abaixo de um minuto.

  • Atualize A e B juntos e com frequência suficiente para manter seus atrasos abaixo de cinco minutos.

  • Certifique-se de que a atualização de A e B coincida com uma atualização de C para garantir o isolamento do instantâneo.

Observação: se as atualizações demorarem muito, o agendador poderá ignorá-las para tentar se manter atualizado. No entanto, o isolamento do instantâneo é preservado.