Limite de atualização de tabelas dinâmicas¶
Use um limite de atualização de tabelas dinâmicas para desacoplar os pipelines de tabela dinâmica enquanto ainda lê os resultados upstream.
Quando uma tabela dinâmica faz referência a outra, as duas são atualizadas juntas como um único pipeline. Embora isso funcione na maioria dos cenários, há certos casos, como o compartilhamento de dados entre equipes, em que a necessidade de atualizar os dados pode variar. Você pode declarar as duas tabelas dinâmicas como independentes (e, portanto, pertencentes a diferentes pipelines), encapsulando a referência a montante em DYNAMIC_TABLE_REFRESH_BOUNDARY(). O isolamento de instantâneos só é garantido em um único pipeline, então tabelas dinâmicas em um limite de atualização não fornecem isolamento de instantâneos umas com as outras.
Visão geral¶
Por padrão, quando uma tabela dinâmica lê de outra tabela dinâmica, o Snowflake:
Atualiza as duas tabelas juntas como parte de um único pipeline.
Coordena atualizações para que tabelas dinâmicas a downstream vejam o isolamento de instantâneos em todas as tabelas dinâmicas upstream no pipeline.
Impõe regras no nível do pipeline, como verificações de atraso no destino.
Em alguns pipelines, você não quer que cada relacionamento faça com que ambas as tabelas dinâmicas sejam atualizadas juntas. Exemplos comuns incluem:
** Pipelines entre equipes** em que uma equipe publica uma tabela dinâmica que outra equipe consome, mas a tabela dinâmica downstream não deve influenciar ou herdar o pipeline upstream.
Migrações incrementais em que você converte uma etapa de pipeline upstream em uma tabela dinâmica, mas não que os consumidores downstream comecem a coordenar atualizações com ela.
Padrões Dynamic-table-on-view-on-dynamic-table, em que uma tabela dinâmica lê uma exibição que consulta outra tabela dinâmica. Esse padrão não é compatível, exceto se a exibição estiver agrupada em
DYNAMIC_TABLE_REFRESH_BOUNDARY().
Um limite de atualização torna essa separação explícita: as entradas dentro do limite são tratadas como pertencentes a um pipeline separado e lidas como tabelas regulares.
Sintaxe¶
Onde:
object_nameUm nome de tabela, exibição, tabela dinâmica ou expressão de tabela comum (CTE).
Use esta palavra-chave na cláusula FROM / JOIN (incluindo em ramificações CTEs e UNION) de uma definição de tabela dinâmica.
Exemplos¶
O exemplo a seguir lê uma exibição que consulta outra tabela dinâmica. Sem um limite de atualização, não é possível criar uma tabela dinâmica que lê uma exibição em outra tabela dinâmica. Delimitar a exibição em DYNAMIC_TABLE_REFRESH_BOUNDARY() torna esse padrão possível:
O exemplo a seguir une uma tabela dinâmica referenciada diretamente a uma visualização cuja tabela dinâmica upstream é atualizada em intervalos mais longos. Delimitar a exibição em DYNAMIC_TABLE_REFRESH_BOUNDARY() evita que a tabela dinâmica downstream acione a atualização cara upstream a cada 5 minutos, ao mesmo tempo em que permite que ela leia a versão mais recente disponível. O isolamento de instantâneos não é garantido além do limite de atualização:
Comportamento¶
Como atualizar limites alteram dependências¶
Quando você delimita uma entrada em DYNAMIC_TABLE_REFRESH_BOUNDARY() dentro de uma definição de tabela dinâmica:
Essa entrada é tratada como uma entrada de limite de atualização para a definição.
As tabelas dinâmicas que podem ser acessadas a partir dessa entrada não estão incluídas no pipeline da definição.
Na atualização, a tabela dinâmica lê esses objetos na versão atual, não no carimbo de data/hora dos dados coordenado em todo o pipeline.
Como resultado:
- Nenhuma atualização em cascata além do limite
Atualizar a tabela dinâmica downstream não aciona atualizações de tabelas dinâmicas que só podem ser acessadas por um limite de atualização.
- Agendamento independente
O atraso de destino e o agendamento de atualizações para a tabela dinâmica downstream ignoram as tabelas dinâmicas que só podem ser acessadas pelo limite.
- Nenhum isolamento de instantâneos além do limite
A tabela dinâmica downstream lê qualquer versão dos dados upstream disponível no momento da atualização. Não há garantia de que os dados além do limite estejam alinhados com o isolamento de instantâneos que se aplica a outras dependências upstream.
Isolamento de instantâneos vs. limites de atualização¶
Dentro de um único pipeline (sem limites), o Snowflake garante isolamento de instantâneos em todas as tabelas dinâmicas upstream que participam desse pipeline.
Essa garantia sobre a dependência que vai além do limite é ativada intencionalmente quando os limites são atualizados:
Dentro do limite: os objetos são atualizados e coordenados de acordo com seus próprios pipelines.
Fora do limite: a tabela dinâmica downstream lê qualquer versão disponível no momento da atualização.
Portanto, uma única definição de tabela dinâmica pode fazer referência a ambos os tipos de entradas:
Referências diretas a tabelas dinâmicas upstream, que participam do isolamento de instantâneos e atualizações coordenadas dentro do pipeline.
Referências de limite de atualização, que leem a versão mais recente disponível dos dados upstream de forma independente, sem isolamento de instantâneos.
Limites de atualização só devem ser usados em dependências em que você não precisa de isolamento de instantâneos entre as tabelas dinâmicas upstream e downstream.
Casos de uso¶
Desanexação de pipelines entre equipes¶
Equipes diferentes podem ser proprietárias de partes diferentes de um pipeline lógico:
Equipe A: publica uma tabela dinâmica principal usada em toda a organização.
Equipe B: define uma tabela dinâmica downstream que une a tabela dinâmica principal com dados específicos da equipe.
A equipe B pode delimitar a saída da equipe A em um limite de atualização para:
Evitar puxar as tabelas dinâmicas da equipe A para seu próprio pipeline.
Manter a independência do seu próprio cronograma de atualizações.
Tratar a tabela dinâmica da equipe A como uma tabela externa atualizada periodicamente.
Habilitar uma tabela dinâmica que lê exibições em outra tabela dinâmica¶
Sem um limite de atualização, não é possível criar uma tabela dinâmica que lê uma exibição em outra tabela dinâmica. Com um limite de atualização, é possível marcar explicitamente a dependência da exibição como um limite:
Aqui,``order_summary_dt``:
Lê de
orders_dtpor um limite de atualização.Não pertence ao mesmo pipeline que
orders_dt.Lê qualquer versão de
orders_dtdisponível quando ele é atualizado.
Exemplo: exibição de limite de propriedade da equipe¶
Um padrão comum é uma equipe que é proprietária de uma tabela dinâmica e de uma exibição dela aplicar o limite de atualização dentro da definição da exibição. Outras equipes consomem essa exibição sem introduzir novas dependências à tabela dinâmica da equipe proprietária.
Nesse padrão:
A equipe A controla o limite de atualização delimitando
product_catalog_dtemproduct.active_products_public_v.A equipe B e outras equipes definem suas próprias tabelas dinâmicas que fazem referência apenas à exibição publicada.
Essas tabelas dinâmicas downstream não adicionam
product_catalog_dtao seu próprio pipeline;product_catalog_dtfica fora dos pipelines, mesmo que os dados estejam visíveis na exibição.
Migração incremental para tabelas dinâmicas¶
Ao migrar uma etapa de pipeline para uma tabela dinâmica, talvez você não queira que os consumidores downstream:
Comecem a acionar atualizações da nova tabela dinâmica.
Herdem novos requisitos de atraso no destino.
Se a nova tabela dinâmica (ou uma exibição sobre ela) tiver um limite de atualização, as tabelas dinâmicas downstream poderão consumir sem serem adicionadas ao mesmo pipeline.
Atraso no destino¶
Os limites de atualização também influenciam como o atraso de destino é aplicado.
O atraso de destino de uma tabela dinâmica upstream deve ser o mesmo ou menor que o de qualquer tabela dinâmica downstream no mesmo pipeline. Tabelas dinâmicas referenciadas por DYNAMIC_TABLE_REFRESH_BOUNDARY() não pertencem ao mesmo pipeline, então essa regra não se aplica além do limite.
As tabelas dinâmicas upstream em um limite de atualização mantêm seu próprio atraso no destino e comportamento de agendamento; as escolhas downstream no limite não afetam essas tabelas.
Restrições e limitações¶
Os limites de atualização estão sujeitos a algumas regras importantes:
Não é permitido que a mesma tabela dinâmica esteja dentro e fora de um limite de atualização
Todas as referências à mesma tabela dinâmica upstream em uma única definição devem estar diretamente na definição ou delimitadas em DYNAMIC_TABLE_REFRESH_BOUNDARY(). Caso as referências estejam nos dois, versões diferentes da mesma tabela dinâmica poderiam ser lidas. O Snowflake bloqueia essas definições e retorna um erro descritivo.
Destinos de limite incompatíveis
DYNAMIC_TABLE_REFRESH_BOUNDARY() deve delimitar um objeto nomeado (tabela, exibição, tabela dinâmica ou CTE). Ele não pode delimitar:
Subconsultas em linha.
Funções de tabela ou UDTFs.
Chamadas
TABLE(...)arbitrárias.
Efeito fora das tabelas dinâmicas
Você pode chamar DYNAMIC_TABLE_REFRESH_BOUNDARY() em consultas SELECT regulares, mas fora de uma definição de tabela dinâmica isso não é uma operação.
Práticas recomendadas¶
Ao usar limites de atualização em pipelines de tabela dinâmica:
Use um limite de atualização quando:
Você quiser consumir a tabela dinâmica de outra equipe sem ingressar no pipeline.
Você não precisa isolar instantâneos de uma dependência upstream específica.
Uma tabela dinâmica depende de uma exibição que faz referência a outra tabela dinâmica. Esse padrão só é compatível quando a exibição ou a tabela dinâmica upstream é delimitada em
DYNAMIC_TABLE_REFRESH_BOUNDARY().
Evite usar um limite de atualização quando:
Você precisa isolar instantâneos nessa dependência.
Você quer que as atualizações downstream sejam coordenadas com as tabelas dinâmicas upstream e, se necessário, com as atualizações em cascata.
Você depende das relações de atraso no destino globais em todo o pipeline.