Explicando as chaves primárias em tabelas dinâmicas¶
O Snowflake pode usar chaves primárias em tabelas dinâmicas e tabelas Iceberg dinâmicas para rastrear alterações no nível da linha de forma mais eficiente e permitir a atualização incremental downstream de tabelas dinâmicas de atualização completa. Em vez de depender das colunas de rastreamento de alterações, o Snowflake usa as chaves primárias como identificadores de linha estáveis para computar o conjunto mínimo de alterações entre as atualizações.
Isso é especialmente útil nos seguintes cenários:
As tabelas base são regravadas periodicamente por meio de INSERT OVERWRITE em vez de atualizadas no local, o que normalmente impede o Snowflake de detectar o que mudou entre as versões.
O pipeline lê uma tabela Apache Iceberg™ v2 gerenciada externamente, que precede a linhagem de linhas.
Algumas tabelas dinâmicas devem usar o modo de atualização completa devido aos constructos incrementais incompatíveis, mas as tabelas downstream se beneficiariam do processamento incremental.
Tipos de chaves primárias em tabelas dinâmicas¶
O Snowflake oferece suporte a dois tipos de casos de uso de chave primária para tabelas dinâmicas: 1) rastreamento de alterações no nível da linha e 2) derivação de uma chave exclusiva para a própria tabela dinâmica.
Rastreamento de alterações baseado em linhagem no nível da linha de chave primária¶
Quando uma tabela base tem uma restrição de chave primária com a propriedade RELY definida, o Snowflake usa essa chave para rastreamento de alterações no nível da linha em tabelas dinâmicas downstream. Isso é particularmente útil quando a tabela base é regravada periodicamente por meio de INSERT OVERWRITE, o que normalmente impede o rastreamento de alterações em todas as versões da tabela.
Com uma chave primária confiável, o Snowflake identifica quais linhas mudaram entre as atualizações comparando os valores da chave primária em vez de confiar nas colunas internas de rastreamento de alterações. Isso permite o processamento incremental mesmo quando os dados subjacentes são totalmente substituídos.
Para definir a propriedade RELY em uma chave primária de tabela base:
Derivação de chave exclusiva¶
O Snowflake pode derivar automaticamente uma chave exclusiva confiável da definição de consulta de uma tabela dinâmica. Por exemplo, os seguintes constructos SQL produzem chaves exclusivas derivadas:
GROUP BY: As colunas de agrupamento formam uma chave exclusiva porque cada grupo produz exatamente uma linha de saída.
QUALIFY ROW_NUMBER() = 1: As colunas partition-by formam uma chave exclusiva porque o filtro mantém exatamente uma linha por partição.
Chaves primárias de tabela de base confiáveis: a chave primária da tabela base é usada como a chave exclusiva da tabela dinâmica.
O Snowflake registra chaves primárias derivadas como restrições exclusivas na tabela dinâmica. Como essas restrições vêm da estrutura da consulta, elas são totalmente confiáveis sem validação adicional.
Para verificar se uma tabela dinâmica tem uma chave primária derivada, execute:
Quando usar chaves primárias¶
As chaves primárias são úteis nos seguintes cenários:
- Rastreamento de alterações aprimorado para cargas de trabalho de INSERT OVERWRITE
Quando uma tabela base é regravada periodicamente por meio de INSERT OVERWRITE, o Snowflake não pode usar colunas de rastreamento de alterações padrão para detectar o que mudou. Uma chave primária permite que o Snowflake compare as linhas por valor de chave e processe apenas as alterações reais, evitando uma recomputação completa da tabela dinâmica.
- Habilitar a atualização incremental downstream de tabelas dinâmicas de atualização completa
Normalmente, uma tabela dinâmica no modo de atualização incremental não pode ser downstream de uma tabela dinâmica no modo de atualização completa. Quando a tabela dinâmica de atualização completa upstream tem uma chave exclusiva derivada do sistema, o Snowflake pode computar as alterações entre atualizações completas, permitindo que as tabelas downstream sejam atualizadas de forma incremental. Isso remove um bloqueador significativo dos pipelines incrementais.
- Reduzir a propagação de alterações em pipelines
As chaves primárias permitem a redução de alterações com base em valores em cada estágio de um pipeline. O Snowflake pode filtrar linhas em que a chave primária existe tanto na versão antiga quanto na versão nova com valores idênticos, reduzindo o volume de alterações que se propagam para as tabelas downstream.
Principais comportamentos¶
Ativar a atualização incremental downstream: para usar a atualização incremental em uma tabela dinâmica que lê uma tabela dinâmica de atualização completa com uma chave exclusiva derivada, você deve definir explicitamente
REFRESH_MODE = INCREMENTALna tabela downstream. A configuraçãoREFRESH_MODE = AUTOcontinua a ser resolvida como FULL.Verificar o suporte ao rastreamento de alterações com base em chave primária: use
SHOW UNIQUE KEYS IN <dt_name>para verificar se uma tabela dinâmica tem uma chave exclusiva derivada. Como alternativa, crie uma tabela dinâmica downstream comREFRESH_MODE = INCREMENTALe verifique se a criação foi bem-sucedida.Políticas de mascaramento: políticas de mascaramento que ocultam as colunas de chave primária impedem que o Snowflake utilize essas chaves para o rastreamento de alterações. Nesse caso, o Snowflake retorna para as colunas padrão de rastreamento de alterações.
Próximos passos¶
Para conferir exemplos e orientação sobre implementação, consulte Usar chaves primárias para otimizar pipelines de tabelas dinâmicas.
Para ver a sintaxe completa de CREATE DYNAMIC TABLE, consulte CREATE DYNAMIC TABLE.