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 instaging_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 Práticas recomendadas para escolher os modos de atualização da tabela dinâmica.
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;
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.

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:
Defina o valor para o
TARGET_LAG
de todas as suas tabelas dinâmicas paraDOWNSTREAM
.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;
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>;Atualize manualmente o gráfico de tarefa.
ALTER DYNAMIC TABLE controller REFRESH;
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:
Faça login no Snowsight.
No menu de navegação, selecione Monitoring » Query History.
No menu suspenso Filters, insira CREATE DYNAMIC TABLE no filtro SQL Text e insira o nome do seu warehouse no filtro Warehouse.
Selecione a consulta com sua tabela dinâmica em SQL text e use as abas Query Details e Query Profile para acompanhar o progresso.