Criação de tabelas dinâmicas

Este tópico descreve os principais conceitos para a criação de tabelas dinâmicas.

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 se aplicam à criação de tabelas dinâmicas. Para obter uma lista completa, consulte Limitações da tabela dinâmica.

Nota

Para orientações sobre como escrever consultas que funcionam de forma eficiente com atualização incremental, consulte Otimizar consultas para atualização incremental.

Habilitar o rastreamento de alterações

Ao criar uma tabela dinâmica com o modo de 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.

À medida que os objetos de base mudam, a tabela dinâmica também muda. Se você recriar um objeto base, deverá reativar o controle de alterações.

Nota

O Snowflake não tenta habilitar automaticamente o rastreamento de alterações em tabelas dinâmicas criadas com o modo de atualização completa.

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.

Objetos base compatíveis

As tabelas dinâmicas são compatíveis com os seguintes objetos base:

  • Tabelas

  • Tabelas Apache Iceberg™ gerenciadas pelo Snowflake

  • Tabelas Apache Iceberg™ gerenciadas externamente

Exemplo: criar uma tabela dinâmica simples

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

  • Você quer que os dados na tabela dinâmica 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ê quer que o modo de atualização seja escolhido automaticamente.

    • A Snowflake recomenda usar o modo de atualização automática somente durante o desenvolvimento. Para obter mais informações, consulte Escolher um modo de atualização.

  • Você quer que a tabela dinâmica seja atualizada de forma síncrona na criação.

  • Você deseja que o modo 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 my_dynamic_table
  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.

Criação de tabelas dinâmicas que leem de tabelas Apache Iceberg™ gerenciadas pelo Snowflake ou externamente

Criar uma tabela dinâmica a partir de uma tabela Iceberg é semelhante a criar uma com base em uma tabela regular. Execute a instrução SQL CREATE DYNAMIC TABLE como você faria para uma tabela regular, usando como objeto base uma tabela gerenciada pelo Snowflake ou por um catálogo externo.

Tabelas dinâmicas que leem de uma tabela Iceberg gerenciada pelo Snowflake como tabela base são úteis se você quiser que seus pipelines operem com dados em uma tabela Iceberg gerenciada pelo Snowflake ou gravada por outros mecanismos. Observe que mecanismos externos não podem gravar em tabelas Iceberg gerenciadas pelo Snowflake; elas são de leitura e gravação para o Snowflake e somente leitura para mecanismos externos.

Tabelas dinâmicas que leem tabelas Iceberg gerenciadas por catálogos externos (não Snowflake), como AWS Glue, e gravadas por mecanismos, como o Apache Spark, são úteis para processar dados de data lakes externos. Você pode criar tabelas dinâmicas com base em dados gerenciados externamente, processando-os de forma contínua no Snowflake sem duplicar ou ingerir os dados.

Limitações e considerações sobre o uso de tabelas Iceberg

Todas as limitações de tabelas dinâmicas regulares e tabelas Iceberg dinâmicas ainda se aplicam.

Adicionalmente:

  • Todas as limitações de tabelas Iceberg básicas se aplicam. Para obter mais informações, consulte Considerações e limitações.

  • Você pode criar uma tabela dinâmica que lê tabelas nativas do Snowflake, tabelas Iceberg gerenciadas pelo Snowflake e tabelas Iceberg gerenciadas externamente.

  • As tabelas dinâmicas monitoram alterações no nível do arquivo para tabelas Iceberg de base gerenciadas externamente, ao contrário de outras tabelas que monitoram alterações no nível da linha. Operações frequentes de cópia ao gravar (por exemplo, atualizações ou exclusões) em tabelas Iceberg gerenciadas externamente podem afetar o desempenho das atualizações.

Criar tabelas dinâmicas com imutabilidade e preenchimento

Restrições de imutabilidade permitem marcar partes de uma tabela dinâmica como estática. Quando você define uma cláusula IMMUTABLE WHERE, o Snowflake ignora essas linhas durante a atualização, o que melhora o desempenho para tabelas com grandes quantidades de dados históricos.

O preenchimento estende as restrições de imutabilidade, permitindo que você copie os dados existentes em uma tabela dinâmica sem calculá-los. Essa operação disponibiliza os dados históricos imediatamente enquanto você define uma consulta de atualização personalizada para atualizações futuras.

Para obter mais informações e exemplos, consulte Uso de restrições de imutabilidade.

Práticas recomendadas para criar tabelas dinâmicas

Como encadear pipelines de tabelas dinâmicas

Ao definir uma nova tabela dinâmica, em vez de definir uma tabela dinâmica grande com muitas instruções aninhadas, use tabelas dinâmicas pequenas com pipelines.

Você pode configurar uma tabela dinâmica para consultar outras tabelas dinâmicas. Por exemplo, imagine um cenário em que seu pipeline de dados extrai dados de uma tabela de preparação para atualizar várias tabelas de dimensão (por exemplo, customer, product, date e time). Além disso, seu pipeline atualiza uma tabela sales agregada com base nas informações dessas tabelas de dimensão. Ao configurar as tabelas de dimensão para consultar a tabela de preparação e a tabela sales agregada para consultar as tabelas de dimensão, você cria um efeito cascata semelhante a um gráfico de tarefa.

Nessa configuração, a atualização da tabela sales agregada é executada somente após as atualizações das tabelas de dimensão serem concluídas com sucesso. Isso garante a consistência dos dados e atende às metas de atraso. Por meio de um processo de atualização automatizado, quaisquer alterações nas tabelas de origem acionam atualizações em todas as tabelas dependentes nos momentos apropriados.

Comparação entre DAGs de tabelas dinâmicas e gráficos de tarefas

Uso de uma tabela dinâmica de “controlador” para os gráficos de tarefa complexos

Quando você tem um gráfico complexo de tabelas dinâmicas com muitas raízes e folhas e deseja executar operações (por exemplo, alteração de atraso, atualização manual, suspensão) no gráfico de tarefa completo com um único comando, faça o seguinte:

  1. Defina o valor para o TARGET_LAG de todas as suas tabelas dinâmicas para DOWNSTREAM.

  2. Crie uma tabela dinâmica de “controlador” que leia todas as folhas em seu gráfico de tarefa.

    • Uma tabela dinâmica folha é um nó no seu gráfico de tarefa sem dependências downstream. Nenhuma outra tabela dinâmica lê a partir dela, portanto ela não é uma dependência de nenhuma outra tabela dinâmica.

    • Substitua <leaf1>, <leaf2>, …, <leafN> por nomes reais de tabelas dinâmicas folha.

    • Para garantir que esse controlador não consuma recursos, crie uma junção cartesiana com LIMIT 0.

    CREATE DYNAMIC TABLE controller
      TARGET_LAG = <target_lag>
      WAREHOUSE = <warehouse>
      AS
        SELECT 1 A FROM <leaf1>, …, <leafN> LIMIT 0;
    
    Copy
  3. Use o controlador para controlar o gráfico inteiro. Por exemplo:

  • Defina um novo atraso de destino para o gráfico de tarefa.

    ALTER DYNAMIC TABLE controller SET
      TARGET_LAG = <new_target_lag>;
    
    Copy
  • Atualize manualmente o gráfico de tarefa.

    ALTER DYNAMIC TABLE controller REFRESH;
    
    Copy

Uso de tabelas dinâmicas transitórias para reduzir o custo de armazenamento

Tabelas dinâmicas transitórias mantêm os dados confiáveis ao longo do tempo e oferecem suporte à Time Travel dentro do período de retenção de dados, mas não retêm os dados além do período de fail-safe. Por padrão, os dados da tabela dinâmica são mantidos por sete dias no armazenamento fail-safe.

Para tabelas dinâmicas com alta taxa de atualização, isso pode aumentar significativamente o consumo de armazenamento. Portanto, você deve tornar uma tabela dinâmica transitória somente se seus dados não precisarem do mesmo nível de proteção e recuperação de dados fornecido pelas tabelas permanentes.

Você pode criar uma tabela dinâmica transitória ou clonar tabelas dinâmicas existentes para tabelas dinâmicas transitórias usando a instrução CREATE DYNAMIC TABLE.

Solução de problemas de criação de tabela dinâmica

Quando você cria uma tabela dinâmica, a atualização inicial ocorre em um cronograma (ON_SCHEDULE) ou imediatamente no momento da criação (ON_CREATE). O preenchimento inicial de dados, ou inicialização, depende de quando a atualização inicial ocorre. Por exemplo, para ON_CREATE, a inicialização poderá demorar mais se acionar atualizações de tabelas dinâmicas upstream.

A inicialização pode levar algum tempo, dependendo da quantidade de dados digitalizados. Para visualizar o progresso, faça o seguinte:

  1. Faça login no Snowsight.

  2. No menu de navegação, selecione Monitoring » Query History.

  3. No menu suspenso Filters, insira CREATE DYNAMIC TABLE no filtro SQL Text e insira o nome do seu warehouse no filtro Warehouse.

  4. Selecione a consulta com sua tabela dinâmica em SQL text e use as abas Query Details e Query Profile para acompanhar o progresso.