Criação de tabelas dinâmicas

Este tópico descreve os principais conceitos para a criação de tabelas dinâmicas, juntamente com o que ocorre durante o processo de inicialização.

Antes de começar, verifique se você tem os privilégios para criar tabelas dinâmicas e se todos os objetos usados pela consulta de tabela dinâmica têm o rastreamento de alterações ativado.

Algumas limitações podem ser aplicadas à criação de tabelas dinâmicas. Para obter uma lista completa, consulte Limitações conhecidas para tabelas dinâmicas.

Habilitar o rastreamento de alterações

O Snowflake tenta automaticamente ativar o rastreamento de alterações em todos os objetos subjacentes quando uma tabela dinâmica é criada. Conforme os objetos subjacentes do banco de dados mudam, a tabela dinâmica também muda. Se você recriar um objeto, deverá reativar o rastreamento de alterações.

Ao criar uma tabela dinâmica com atualização incremental, se o rastreamento de alterações ainda não estiver habilitado nas tabelas que ele consulta, o Snowflake tentará automaticamente habilitar o rastreamento de alterações nelas. Para oferecer suporte a atualizações incrementais, o rastreamento de alterações deve ser ativado com retenção no Time Travel diferente de zero em todos os objetos subjacentes usados por uma tabela dinâmica.

Para ativar o rastreamento de alterações em um objeto de banco de dados específico, use ALTER TABLE, ALTER VIEW e comandos semelhantes nesse objeto. O usuário que cria a tabela dinâmica deve ter o privilégio OWNERSHIP para habilitar o rastreamento de alterações em todos os objetos subjacentes. Para verificar se o rastreamento de alterações está habilitado, use SHOW VIEWS, SHOW TABLES e comandos semelhantes nos objetos subjacentes e inspecione a coluna change_tracking.

Sintaxe para criação de tabelas dinâmicas

Suponha que você queira criar uma tabela dinâmica chamada product que contenha as colunas product_id e product_name da tabela chamada staging_table e você decide:

  • Você quer que os dados na tabela product estejam no máximo 20 minutos atrás dos dados na staging_table.

  • Você deseja usar o warehouse mywh para os recursos de computação necessários para a atualização.

  • Você deseja que o tipo de atualização seja escolhido automaticamente e que a tabela dinâmica seja atualizada de forma síncrona na criação.

Para criar esta tabela dinâmica, você teria que executar a seguinte instrução CREATE DYNAMIC TABLE SQL:

CREATE OR REPLACE DYNAMIC TABLE product
  TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  REFRESH_MODE = auto
  INITIALIZE = on_create
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

Para obter uma lista completa de parâmetros e sintaxe variante, consulte a referência CREATE DYNAMIC TABLE.

Inicialização da tabela dinâmica

Quando você cria uma tabela dinâmica usando uma instrução CREATE DYNAMIC TABLE, sua atualização inicial ocorre em um horário agendado ou de forma síncrona na criação. O preenchimento inicial de dados, ou inicialização, depende de quando a atualização inicial ocorre.

As tabelas dinâmicas são atualizadas com base na meta de atraso especificado, que define o tempo máximo permitido para o conteúdo da tabela dinâmica ficar atrasado em relação às atualizações das tabelas base. Se você especificar uma tabela dinâmica para ser atualizada de forma síncrona na criação, ela será inicializada imediatamente. No entanto, se uma tabela dinâmica for configurada para atualização em um horário agendado, ela será inicializada dentro do horário especificado para a meta de atraso.

Por exemplo, considere uma tabela dinâmica, DT1, com uma meta de atraso de 30 minutos. O preenchimento inicial de dados para DT1 pode ocorrer da seguinte forma:

  1. Se DT1 estiver configurado para atualizar de forma síncrona na criação (padrão), ele será inicializado na criação.

  2. Se DT1 estiver definido para atualização em um horário agendado, ele será inicializado dentro do horário especificado para a meta de atraso.

Em cenários que envolvem dependências downstream, as tabelas dinâmicas mudam. Considere as tabelas dinâmicas DT1 e DT2, em que DT1 tem uma meta de atraso downstream e DT2 tem uma meta de atraso de 30 minutos e depende de DT1. DT1, com sua meta de atraso downstream, é atualizado somente quando tabelas dinâmicas dependentes, como DT2, são atualizadas.

Para DT1 neste contexto:

  1. Se definido para atualizar de forma síncrona na criação, ele será atualizado e inicializado na criação. Se a inicialização falhar, o processo de criação da tabela será parado, fornecendo feedback imediato sobre quaisquer definições incorretas.

  2. Se configurada para atualização em um horário agendado, a inicialização dependerá de quando DT2, a tabela dependente, for atualizada.

A inicialização pode levar algum tempo, dependendo da quantidade de dados digitalizados. Para acompanhar o progresso, você pode consultar o histórico de atualizações usando a função DYNAMIC_TABLE_REFRESH_HISTORY.

Como compreender os efeitos das alterações nas colunas das tabelas de base

As colunas nas tabelas de base, exibições e tabelas dinâmicas subjacentes podem mudar com o tempo. Algumas alterações podem afetar a própria tabela dinâmica; outras podem ter impacto limitado ou nenhum impacto.

Quando os objetos subjacentes associados a uma tabela dinâmica mudam, os seguintes comportamentos se aplicam:

Mudança

Impacto

  • Nova coluna adicionada.

  • Coluna não utilizada existente removida.

Nenhum. Se uma nova coluna for adicionada à tabela de base ou uma coluna não utilizada for excluída, nenhuma ação ocorrerá e as atualizações continuarão como antes.

  • A tabela de base subjacente é recriada com nomes e tipos de coluna idênticos.

  • A coluna da tabela de base subjacente é recriada com o mesmo nome e tipo.

Atualização/reinicialização completa: durante o próximo ciclo de atualização, uma atualização completa é feita para garantir que nenhum dado incorreto ou obsoleto esteja na tabela dinâmica.

  • Uma coluna subjacente ou outro elemento usado por uma tabela dinâmica muda de nome ou de alguma outra forma.

O estado da tabela dinâmica muda para FAILING. A tabela dinâmica deve ser recriada para responder à alteração. Para obter mais informações sobre os estados de tabela dinâmica, consulte Estados da tabela dinâmica.