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

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.

Sintaxe para criação de tabelas dinâmicas

Suppose that you want to create a dynamic table named product that contains the product_id and product_name columns from the table named staging_table, and you decide:

  • You want the data in the product table to be at most 20 minutes behind the data in 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.

  • 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 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.

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 o 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 agregada sales para consultar as tabelas de dimensão, você cria um efeito em cascata semelhante a um gráfico de tarefas.

Nessa configuração, a atualização da tabela sales agregada é executada somente depois que as atualizações das tabelas de dimensão forem concluídas com êxito. 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. Para garantir que este controlador não consuma recursos, faça o seguinte:

    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

Sobre clonagem de pipelines de tabelas dinâmicas

Clone todos os elementos do pipeline da tabela dinâmica com o mesmo comando de clonagem para evitar reinicializações de seu pipeline. Você pode fazer isso consolidando todos os elementos do pipeline (por exemplo, tabelas base, visualizações e tabelas dinâmicas) no mesmo esquema ou banco de dados.

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 após a criação (ON_CREATE). O preenchimento inicial de dados, ou inicialização, depende de quando a atualização inicial ocorre. Por exemplo, no caso de ON_CREATE, a inicialização pode levar mais tempo 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.