Tabelas dinâmicas comparadas a fluxos e tarefas e a exibições materializadas¶
Assim como os fluxos e tarefas, as tabelas dinâmicas fornecem uma maneira de transformar dados em seu pipeline.
Tabelas dinâmicas comparadas a fluxos e tarefas¶
Embora as tabelas dinâmicas tenham uma finalidade semelhante em comparação com os fluxos e as tarefas, existem diferenças importantes.
Criação de um fluxo em uma tabela dinâmica¶
Os fluxos podem ser criados em tabelas dinâmicas da mesma forma que os fluxos em tabelas tradicionais, mas com as seguintes limitações:
Modo de atualização: os fluxos podem ser criados somente em tabelas dinâmicas atualizadas incrementalmente. As tabelas dinâmicas de atualização completa não são compatíveis porque elas reescrevem completamente a tabela a cada atualização.
Tipo de fluxo: as tabelas dinâmicas são compatíveis apenas com fluxos padrão (ou seja, delta). Para obter mais informações, consulte Tipos de fluxos.
O exemplo a seguir mostra como criar um fluxo em uma tabela dinâmica:
-- Create the dynamic table, for reference only
CREATE OR REPLACE DYNAMIC TABLE product ...;
-- Create the stream.
CREATE OR REPLACE STREAM deltaStream ON DYNAMIC TABLE product;
Comparação entre fluxos, tarefas e tabelas dinâmicas¶
Fluxos e tarefas |
Tabelas dinâmicas |
---|---|
As tarefas usam uma abordagem imperativa: você escreve código processual para transformar dados de tabelas base. |
As tabelas dinâmicas usam uma abordagem declarativa: você escreve uma consulta que especifica o resultado desejado e os dados são recuperados e transformados a partir das tabelas base usadas na consulta. Com exceção de Funções não determinísticas suportadas em atualização completa, a consulta não pode conter funções não determinísticas. |
Você define um cronograma para executar o código que transforma os dados. |
Um processo de atualização automatizado determina o agendamento para execução de atualizações. O processo agenda essas atualizações para atender ao nível alvo especificado de atualização (atraso). |
O código de procedimento pode conter chamadas para código não determinístico, procedimentos armazenados e outras tarefas. O código processual pode conter chamadas para UDFs e funções externas. |
Mesmo que a instrução SELECT para uma tabela dinâmica possa conter junções, agregações, funções de janela e outras funções e construções SQL, a instrução não pode conter chamadas para tarefas e procedimentos armazenados. Atualmente, a instrução SELECT também não pode conter chamadas para funções externas. Essa limitação se deve à forma como as tabelas dinâmicas são atualizadas. Para atualizar os dados, um processo automatizado analisa a instrução SELECT para a tabela dinâmica para determinar a melhor abordagem para atualizar os dados. O processo automatizado não pode determinar isso para certos tipos de consultas. Para obter a lista completa de restrições na instrução SELECT, consulte Consultas suportadas na atualização incremental e Limitações gerais. |
As tarefas podem usar fluxos para atualizar dados em tabelas de destino de forma incremental. Você pode agendar essas tarefas para serem executadas regularmente. |
Um processo de atualização automatizado realiza atualizações incrementais de tabelas dinâmicas regularmente. O processo determina o agendamento com base no “nível de atualização” desejado dos dados que você especifica. |
Exemplo: comparação de transformação de dados entre fluxos, tarefas e tabelas dinâmicas¶
O exemplo em Transformando dados JSON carregados em um cronograma usa fluxos e tarefas para transformar e inserir novos dados em uma tabela de destino (names
) à medida que os dados são transmitidos para uma tabela de destino (raw
).
Os exemplos a seguir demonstram como realizar a mesma transformação usando tabelas dinâmicas. 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.
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;
|
Tabelas dinâmicas comparadas a exibições materializadas¶
As tabelas dinâmicas têm algumas semelhanças com as exibições materializadas, pois ambas materializam os resultados de uma consulta. No entanto, existem diferenças importantes:
Exibições materializadas |
Tabelas dinâmicas |
---|---|
Exibições materializadas são projetadas para melhorar o desempenho da consulta de forma transparente. Por exemplo, se você consultar a tabela de base, o otimizador de consulta no Snowflake poderá reescrever a consulta automaticamente para consultar a exibição materializada. |
As tabelas dinâmicas são projetadas para construir pipelines de dados multinível. Embora as tabelas dinâmicas possam melhorar o desempenho da consulta, o otimizador de consulta no Snowflake não reescreve automaticamente as consultas para usar tabelas dinâmicas. Uma tabela dinâmica é usada em uma consulta somente se você especificar a tabela dinâmica na consulta. |
Uma exibição materializada pode usar apenas uma única tabela de base. Uma exibição materializada não pode ser baseada em uma consulta complexa (ou seja, uma consulta com junções ou exibições aninhadas). |
Uma tabela dinâmica pode ser baseada em uma consulta complexa, incluindo uma com junções e uniões. |
Os dados acessados por meio de exibições materializadas são sempre atuais. Se uma operação DML alterar os dados na tabela de base, o Snowflake atualizará a exibição materializada ou usará os dados atualizados da tabela de base. |
Os dados são atuais até o tempo de atraso de destino para a tabela dinâmica. A manutenção e atualização da tabela dinâmica é gerenciada automaticamente por um serviço de computação separado, incluindo lógica de atualização, juntamente com a computação para quaisquer atualizações, normalmente com custo adicional. Para obter mais informações, consulte Compreensão do custo de tabelas dinâmicas. |