Tabelas dinâmicas¶
As tabelas dinâmicas são os blocos de construção dos pipelines de transformação de dados declarativos. Eles simplificam significativamente a engenharia de dados no Snowflake e fornecem uma maneira confiável, econômica e automatizada de transformar seus dados para consumo. Em vez de definir as etapas de transformação de dados como uma série de tarefas e ter que monitorar dependências e agendamento, você pode simplesmente definir o estado final da transformação usando tabelas dinâmicas e deixar o complexo gerenciamento de pipeline por conta do Snowflake.
Este tópico apresenta conceitos de tabela dinâmica e como transformar dados em um pipeline de dados contínuo usando tabelas dinâmicas.
A tabela dinâmica é uma tabela que materializa os resultados de uma consulta que você especifica. Em vez de criar uma tabela de destino separada e escrever código para transformar e atualizar os dados nessa tabela, você pode definir a tabela de destino como uma tabela dinâmica e pode especificar a instrução SQL que executa a transformação. Um processo automatizado atualiza os resultados materializados automaticamente através de atualizações regulares (e muitas vezes incrementais). Para obter detalhes completos sobre a atualização da tabela dinâmica, consulte Como é feita a atualização de tabela dinâmica.
Como o conteúdo de uma tabela dinâmica é totalmente determinado pela consulta fornecida, o conteúdo não pode ser alterado usando DML. Você não insere, atualiza ou exclui as linhas em uma tabela dinâmica. O processo de atualização automatizado materializa os resultados da consulta em uma tabela dinâmica.
As próximas seções explicam os conceitos por trás das tabelas dinâmicas:
Nota
A replicação de um banco de dados que contém tabelas dinâmicas não é suportada. Se um banco de dados contiver tabelas dinâmicas, a replicação desse banco de dados falhará. Para contornar essa limitação, você deve descartar quaisquer tabelas dinâmicas no banco de dados antes de replicar o banco de dados.
Um exemplo simples¶
O exemplo em Transformando dados JSON carregados em um cronograma usa fluxos e tarefas para transformar e inserir novos dados em duas tabelas de destino (name
e visits
) à medida que os dados são transmitidos para uma tabela de aterrissagem (raw
).
A tabela a seguir demonstra como executar a mesma transformação usando tabelas dinâmicas.
Instruções SQL para fluxos e tarefas |
Instruções SQL para tabelas dinâmicas |
---|---|
-- Create a landing table to store
-- raw JSON data.
CREATE OR REPLACE TABLE raw
(var VARIANT);
-- Create a stream to capture inserts
-- to the landing table.
CREATE OR REPLACE STREAM rawstream1
ON TABLE raw;
-- Create a table that stores the names
-- of office visitors from the raw data.
CREATE OR REPLACE TABLE names
(id INT,
first_name STRING,
last_name STRING);
-- Create a task that inserts new name
-- records from the rawstream1 stream
-- into the names table.
-- Execute the task every minute when
-- the stream contains records.
CREATE OR REPLACE TASK raw_to_names
WAREHOUSE = mywh
SCHEDULE = '1 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('rawstream1')
AS
MERGE INTO names n
USING (
SELECT var:id id, var:fname fname,
var:lname lname FROM rawstream1
) r1 ON n.id = TO_NUMBER(r1.id)
WHEN MATCHED AND metadata$action = 'DELETE' THEN
DELETE
WHEN MATCHED AND metadata$action = 'INSERT' THEN
UPDATE SET n.first_name = r1.fname, n.last_name = r1.lname
WHEN NOT MATCHED AND metadata$action = 'INSERT' THEN
INSERT (id, first_name, last_name)
VALUES (r1.id, r1.fname, r1.lname);
|
-- Create a landing table to store
-- raw JSON data.
CREATE OR REPLACE TABLE raw
(var VARIANT);
-- Create a dynamic table containing the
-- names of office visitors from
-- the raw data.
-- Try to keep the data up to date within
-- 1 minute of real time.
CREATE OR REPLACE DYNAMIC TABLE names
TARGET_LAG = '1 minute'
WAREHOUSE = mywh
AS
SELECT var:id::int id, var:fname::string first_name,
var:lname::string last_name FROM raw;
|
Conforme mostrado no exemplo anterior, ao criar uma tabela dinâmica, você especifica a consulta para os resultados que deseja ver. Para a atualização incremental dos dados, você não precisa criar um fluxo para controlar as alterações e escrever uma tarefa para examinar essas alterações e aplicá-las à tabela de destino. O processo de atualização automática faz isso para você, com base na consulta especificada.
Quando usar tabelas dinâmicas¶
Existem vários métodos que você pode usar para transformar dados em seu pipeline (por exemplo, fluxos e tarefas, CTAS, suas próprias soluções personalizadas etc.) As tabelas dinâmicas são um método possível de transformar seus dados.
As tabelas dinâmicas são mais adequadas para casos em que:
Você não deseja escrever código para rastrear dependências de dados e gerenciar atualização de dados.
Você não precisa, ou deseja evitar, a complexidade de fluxos e tarefas.
Você não precisa de um controle minucioso do cronograma de atualização.
Você precisa materializar os resultados de uma consulta de várias tabelas de base.
Você não precisa usar construções de consulta dinâmica sem suporte, como procedimentos armazenados, funções não determinísticas não listadas em Funções não determinísticas suportadas em tabelas dinâmicas ou funções externas.
Nota
As tabelas dinâmicas podem ser usadas com fluxos. Quando usados juntos, um fluxo baseado em uma tabela dinâmica funciona como qualquer outro fluxo. Para obter informações adicionais e exemplos, consulte Fluxos e tabelas dinâmicas.
Como funcionam as tabelas dinâmicas¶
Ao criar uma tabela dinâmica, você especifica a consulta que deve ser usada para transformar os dados de uma ou mais tabelas de base ou dinâmicas. Um processo de atualização automatizado executa essa consulta regularmente e atualiza a tabela dinâmica com as alterações feitas nas tabelas de base.

Esse processo automatizado calcula as alterações feitas nas tabelas de base e mescla essas alterações na tabela dinâmica. Para executar este trabalho, o processo usa recursos de computação no warehouse que você associa à tabela dinâmica.
Ao criar uma tabela dinâmica, você especifica uma meta de nível de atualização para os dados (um atraso desejado). Por exemplo, você pode especificar que os dados devem estar no máximo 5 minutos atrasados em relação às atualizações da tabela de base. Com base nessa atualização de destino, o processo automatizado configura atualizações para que os dados na tabela dinâmica sejam mantidos atualizados dentro dessa meta (por exemplo, dentro de 5 minutos de atualizações na tabela de base).
Se os dados não precisarem ser tão atualizados, você pode especificar um tempo de atualização mais longo para reduzir os custos. Por exemplo, se os dados na tabela de destino precisarem estar no máximo 1 hora atrás das atualizações nas tabelas de base, você pode especificar uma meta de atualização de 1 hora (em vez de 5 minutos) para reduzir custos.
Como encadear os pipelinas das tabelas dinâmicas¶
Você pode configurar uma tabela dinâmica para consultar outras tabelas dinâmicas.
Por exemplo, suponha que seu pipeline de dados recupere dados de uma tabela de preparação para atualizar tabelas de dimensão para clientes, produtos e dados de data e hora. Suponha que seu pipeline também atualize uma tabela contendo dados de vendas agregados, com base nas tabelas de dimensão.
Você pode configurar as tabelas de dimensão como tabelas dinâmicas que consultam a tabela de preparação. Você pode configurar a tabela de vendas agregadas como uma tabela dinâmica que consulta as tabelas de dimensão.
Isso é semelhante à maneira como você pode definir um gráfico acíclico direcionado (DAG) de tarefas. Em um DAG de tarefas, a tarefa que atualiza a tabela agregada de vendas é executada apenas se as tarefas para atualizar as tabelas de dimensões tiverem sido executadas até a conclusão sem erros.

Se uma tabela dinâmica consultar outra tabela dinâmica, o processo de atualização automática atualizará todas as tabelas dinâmicas dependentes no momento apropriado para garantir que suas metas de atraso sejam atendidas e que os dados sejam consistentes.
Compreensão dos privilégios necessários para tabelas dinâmicas¶
As seções a seguir explicam os privilégios necessários para criar e trabalhar com tabelas dinâmicas:
Privilégios das tabelas dinâmicas¶
A tabela a seguir descreve os privilégios necessários para gerenciar tabelas dinâmicas:
Privilégio |
Uso |
---|---|
SELECT |
Permite executar uma instrução SELECT em uma tabela dinâmica. |
MONITOR |
Habilita a visualização de detalhes para a tabela dinâmica (usando DESCRIBE DYNAMIC TABLE ou a página de detalhes das tabelas dinâmicas em Snowsight) e listando as tabelas às quais você tem acesso (usando SHOW DYNAMIC TABLES). |
OPERATE |
Habilita a visualização de detalhes para a tabela dinâmica (usando DESCRIBE DYNAMIC TABLE) e alterando as seguintes propriedades: WAREHOUSE e TARGET_LAG. |
OWNERSHIP |
Concede controle total sobre a tabela dinâmica. Necessário para alterar as propriedades de uma tabela dinâmica. Somente uma única função pode ter este privilégio sobre um objeto específico de cada vez. |
ALL [ PRIVILEGES ] |
Concede todos os privilégios, exceto OWNERSHIP, na tabela dinâmica. |