Usar chaves primárias para otimizar pipelines de tabelas dinâmicas¶
O Snowflake pode usar chaves primárias para rastrear alterações no nível da linha em tabelas dinâmicas sem depender de colunas de rastreamento de alterações. Isso permite a atualização incremental para pipelines que executam cargas de trabalho de inserção/substituição, incluindo tabelas dinâmicas de atualização completa, que normalmente bloqueiam o processamento incremental downstream.
As chaves primárias são especialmente eficazes quando INSERT OVERWRITE é realizado em uma tabela base em que apenas uma pequena fração dos dados é de fato alterada. Nesses casos, o rastreamento de alterações baseado em chave primária processa apenas as linhas alteradas em vez de recalcular toda a tabela. Uma chave primária fornece um identificador de linha estável que persiste após as substituições.
Para saber o contexto conceitual, consulte Explicando as chaves primárias em tabelas dinâmicas.
Melhorar o desempenho de cargas de trabalho de INSERT OVERWRITE¶
Quando uma tabela base é periodicamente regravada por meio de INSERT OVERWRITE, as colunas padrão de rastreamento de alterações são redefinidas, e uma tabela dinâmica que consome a tabela base vê um conjunto de inserções e exclusões para todas as linhas na tabela base.
No exemplo a seguir, um processo externo regrava dimension_table periodicamente, mas a maioria das linhas permanece a mesma:
Quando a tabela de dimensões é regravada por meio de INSERT OVERWRITE, o Snowflake usa a chave primária para identificar as linhas de dimensão que realmente mudaram e atualiza apenas os fatos afetados, em vez de recalcular a junção inteira.
Habilitar a atualização incremental downstream de uma tabela dinâmica de atualização completa¶
Normalmente, uma tabela dinâmica com REFRESH_MODE = INCREMENTAL não pode ler uma tabela dinâmica com REFRESH_MODE = FULL. Quando a tabela dinâmica de atualização completa tem uma chave exclusiva derivada do sistema, você pode definir explicitamente o modo de atualização como INCREMENTAL.
Exemplo: usar uma chave primária de tabela base¶
Crie uma tabela base com uma chave primária e defina a propriedade RELY para que o Snowflake a use para rastreamento de alterações no nível da linha:
Crie uma tabela dinâmica de atualização completa que leia a tabela base. Como a tabela base tem uma chave primária confiável, o Snowflake pode derivar uma chave exclusiva da tabela base e registrá-la como uma restrição única para a tabela dinâmica:
Crie uma tabela dinâmica incremental downstream. Isso funciona porque a tabela upstream tem uma chave exclusiva confiável derivada do sistema:
Exemplo: usar uma chave primária derivada de consulta¶
Quando a consulta de uma tabela dinâmica inclui uma cláusula GROUP BY, o Snowflake deriva automaticamente uma chave exclusiva das colunas de agrupamento. Tabelas downstream podem usar essa chave derivada para rastreamento de alterações baseado em chave primária e habilitar atualizações incrementais.
A tabela daily_sales tem uma chave exclusiva derivada em (sale_day, product_id) porque GROUP BY garante uma linha por combinação. Uma tabela downstream pode ser atualizada de forma incremental:
Verificar as chaves exclusivas derivadas do sistema em uma tabela dinâmica¶
Para ver se uma tabela dinâmica tem uma chave exclusiva derivada, use o comando SHOW UNIQUE KEYS:
Se a saída contiver uma chave exclusiva, a tabela dinâmica permitirá o rastreamento de alterações baseado em chave primária. As tabelas dinâmicas downstream podem usar REFRESH_MODE = INCREMENTAL para lê-la, mesmo que ela use o modo de atualização completa.
Você também pode verificar a compatibilidade criando uma tabela dinâmica downstream com REFRESH_MODE = INCREMENTAL. Se a tabela upstream não tiver uma chave exclusiva confiável, a criação falhará com um erro.