Criação de tabelas dinâmicas¶
As tabelas dinâmicas podem ser criadas e eliminadas de forma muito parecida com as tabelas tradicionais, mas existem algumas diferenças e limitações. Além disso, alterar as tabelas subjacentes, exibições e outras tabelas dinâmicas que compõem uma consulta de tabela dinâmica pode causar alterações de comportamento ou tornar inoperante uma tabela dinâmica existente. As seções a seguir descrevem a criação e descarte de tabelas dinâmicas e algumas limitações e preocupações.
Tarefa |
Descrição |
---|---|
Criação de tabelas dinâmicas, incluindo privilégios necessários para criar uma tabela dinâmica. |
|
Descarte de tabelas dinâmicas. |
|
Construções de consulta não suportadas atualmente em tabelas dinâmicas |
Construções de consulta não suportadas. |
Funções não determinísticas suportadas. |
|
Compreensão da criação de tabelas dinâmicas e o controle de alterações. |
Criação de uma tabela dinâmica¶
Para criar uma tabela dinâmica, use o comando CREATE DYNAMIC TABLE, especificando a consulta a ser usada, o atraso de destino dos dados e o warehouse a ser usado para executar as atualizações.
Por exemplo, suponha que você queira criar uma tabela dinâmica chamada product
que contenha as colunas product_id
e product_name
da tabela chamada staging_table
e você decide:
Você quer que os dados na tabela
product
estejam no máximo 20 minutos atrás dos dados nastaging_table
.Você deseja usar o warehouse
mywh
para os recursos de computação necessários para as atualizações (incrementais e completas).
Para criar esta tabela dinâmica, execute a seguinte instrução CREATE DYNAMIC TABLE SQL:
CREATE OR REPLACE DYNAMIC TABLE product
TARGET_LAG = '20 minutes'
WAREHOUSE = mywh
AS
SELECT product_id, product_name FROM staging_table;
Assim como acontece com a exibição materializada, as colunas em uma tabela dinâmica são determinadas pelas colunas especificadas na instrução SELECT usada para criar a tabela dinâmica. Para colunas que são expressões, você deve especificar aliases para as colunas na instrução SELECT.
Você deve garantir que todos os objetos usados pela consulta de tabela dinâmica tenham o controle de alterações ativado. Consulte Tabelas dinâmicas e rastreamento de alterações neste tópico para obter detalhes adicionais.
Nota
Se a consulta depender de outra tabela dinâmica, consulte Como os dados são atualizados quando as tabelas dinâmicas dependem de outras tabelas dinâmicas para obter orientações sobre como escolher o tempo de atraso de destino.
Observe também que o TARGET_LAG mínimo para qualquer tabela dinâmica é de um minuto.
Privilégios necessários para criar tabelas dinâmicas¶
Para criar uma tabela dinâmica, você deve ter os seguintes privilégios:
USAGE no banco de dados e esquema no qual você planeja criar a tabela.
CREATE DYNAMIC TABLE no esquema no qual você planeja criar a tabela.
SELECT nas tabelas e exibições existentes que você planeja consultar para a tabela dinâmica.
USAGE no warehouse que você planeja usar para atualizar a tabela.
Para consultar uma tabela dinâmica ou criar uma tabela dinâmica que consulte outra tabela dinâmica, você deve ter os seguintes privilégios:
SELECT na tabela dinâmica.
Descarte de uma tabela dinâmica¶
Para descartar uma tabela dinâmica, você pode usar os comandos Snowsight ou SQL.
- Snowsight
No Snowsight, abra a página de detalhes da tabela dinâmica (instruções).
No menu More no canto superior direito da página, selecione Drop.
- SQL
Use o comando DROP DYNAMIC TABLE.
Por exemplo, para descartar a tabela dinâmica chamada
product
:
DROP DYNAMIC TABLE product;
Como compreender os efeitos das alterações nas colunas das tabelas de base¶
As colunas nas tabelas de base, exibições e tabelas dinâmicas subjacentes podem mudar com o tempo. Algumas alterações podem afetar a própria tabela dinâmica; outras podem ter impacto limitado ou nenhum impacto.
Quando os objetos subjacentes associados a uma tabela dinâmica mudam, os seguintes comportamentos se aplicam:
Mudança |
Impacto |
---|---|
|
Nenhum. Se uma nova coluna for adicionada à tabela de base ou uma coluna não utilizada for excluída, nenhuma ação ocorrerá e as atualizações continuarão como antes. |
|
Atualização/reinicialização completa: durante o próximo ciclo de atualização, uma atualização completa é feita para garantir que nenhum dado incorreto ou obsoleto esteja na tabela dinâmica. |
|
O estado da tabela dinâmica muda para FAILING. A tabela dinâmica deve ser recriada para responder à alteração. Para obter mais informações sobre os estados de tabela dinâmica, consulte Estados da tabela dinâmica. |
Limitações da tabela dinâmica e funções suportadas¶
As tabelas dinâmicas diferem das tabelas tradicionais porque determinadas construções e funções de consulta não são permitidas. Além disso, a otimização de pesquisa, o clustering e o serviço de aceleração de consulta (QAS) não são suportados. As seções a seguir descrevem essas limitações.
Construções de consulta não suportadas atualmente em tabelas dinâmicas¶
As construções a seguir não são suportadas atualmente na consulta para uma tabela dinâmica. Se você especificá-las na consulta para uma tabela dinâmica, ocorrerá um erro.
Funções externas
Funções não determinísticas (exceto aquelas listadas em Funções não determinísticas suportadas em tabelas dinâmicas)
Fontes que incluem tabelas externas, fluxos e exibições materializadas
Exibições em tabelas dinâmicas ou outros objetos sem suporte
Funções não determinísticas suportadas em tabelas dinâmicas¶
As seguintes funções não determinísticas são suportadas em tabelas dinâmicas. Observe que essas funções são suportadas apenas para atualizações completas.
Funções definidas pelo usuário VOLATILE
Funções de sequência (por exemplo, SEQ1, SEQ2)
As seguintes funções de contexto:
As seguintes funções de data e hora (com seus respectivos aliases):
Tabelas dinâmicas e rastreamento de alterações¶
As tabelas dinâmicas são atualizadas à medida que os objetos de banco de dados subjacentes mudam. O rastreamento de alterações deve ser ativado em todos os objetos subjacentes usados por uma tabela dinâmica.
O Snowflake tentará ativar o rastreamento de alterações em todos os objetos subjacentes quando uma tabela dinâmica for criada. No entanto, o usuário que cria a tabela dinâmica pode não ter privilégios suficientes para ativar o rastreamento de alterações em todos os objetos subjacentes.
Para evitar erros ao atualizar tabelas dinâmicas, use SHOW VIEWS, SHOW TABLES e comandos semelhantes e examine a coluna CHANGE_TRACKING para determinar se o rastreamento de alterações está habilitado para um objeto de banco de dados específico.
Use ALTER TABLE, ALTER VIEW e a documentação relacionada para habilitar o rastreamento de alterações em um objeto de banco de dados específico.