Incremental refresh para visualização materializada

Este artigo descreve a semântica e os requisitos para a atualização incremental na visualização materializada e identifica as SQL operações, palavras-chave e cláusulas que oferecem suporte à atualização incremental refresh. Ele inclui uma discussão sobre as diferenças entre a atualização incremental e a completa, além de recomendações para a escolha entre a visualização materializada e as tabelas de transmissão.

Ao executar atualizações na visualização materializada usando o pipeline serverless, muitas consultas podem ser atualizadas de forma incremental. A atualização incremental economiza os custos do compute ao detectar alterações na fonte de dados usada para definir o view materializado e computar o resultado de forma incremental.

pipeline sem servidor são necessários para a refresh

O Incremental refresh para a visualização materializada requer um pipeline sem servidor.

Atualizar operações para a visualização materializada definida em Databricks SQL sempre executadas usando o pipeline serverless.

Para a visualização materializada definida usando o pipeline Delta Live Tables, o senhor deve configurar o pipeline para usar o serverless. Consulte Configurar um pipeline Delta Live Tables sem servidor.

Quais são as semânticas do refresh para a visualização materializada?

A visualização materializada garante resultados equivalentes às consultas de lotes. Por exemplo, considere a seguinte consulta agregada:

SELECT account_id,
  COUNT(txn_id) txn_count,
  SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id

Quando o senhor executa essa consulta usando qualquer Databricks produto, o resultado é computado usando a semântica de lotes para agregar todos os registros na fonte transactions_table, o que significa que todos os dados da fonte são verificados e agregados.

Observação

Alguns Databricks produtos armazenam em cache os resultados automaticamente dentro ou entre sessões se a fonte de dados não tiver sido alterada desde a última vez em que a consulta foi executada. Os comportamentos de cache automático diferem da visualização materializada.

O exemplo a seguir transforma essa consulta de lotes em uma consulta materializada view:

CREATE OR REFRESH MATERIALIZED VIEW transation_summary AS
SELECT account_id,
  COUNT(txn_id) txn_count,
  SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id

Quando o senhor acessa refresh um view materializado, o resultado da computação é idêntico à semântica da consulta de lotes. Essa consulta é um exemplo de uma view materializada que pode ser atualizada de forma incremental, o que significa que a refresh operações faz o melhor esforço possível para processar apenas dados novos ou alterados na fonte transactions_table para compute os resultados.

fonte de dados considerações sobre a visualização materializada

Embora o senhor possa definir um view materializado em relação a qualquer fonte de dados, nem todas as fontes de dados são adequadas à visualização materializada. Considere as seguintes advertências e recomendações:

Importante

A visualização materializada faz o melhor esforço possível para incrementar os resultados de refresh operações suportadas. Algumas alterações na fonte de dados exigem um site completo refresh.

  • Todas as fontes de dados para visualização materializada devem ser robustas para a semântica refresh completa, mesmo que a refresh incremental seja compatível com a consulta que define a view materializada.

  • Para consultas em que um refresh completo teria um custo proibitivo, use tabelas de transmissão para garantir um processamento exatamente único. Os exemplos incluem tabelas muito grandes.

  • Não defina um view materializado em relação a uma fonte de dados se os registros só devem ser processados uma vez. Em vez disso, use tabelas de transmissão. Os exemplos incluem o seguinte:

    • fonte de dados que não retém o histórico de dados, como Kafka.

    • Operações de ingestão, como consultas que usam Auto Loader para ingerir dados do armazenamento de objetos cloud.

    • Qualquer fonte de dados em que o senhor planeja excluir ou arquivar dados após o processamento, mas precisa reter informações em tabelas downstream. Por exemplo, uma tabela particionada por data em que o senhor planeja excluir registros mais antigos do que um determinado limite.

  • Nem todas as fontes de dados suportam atualização incremental. As seguintes fontes de dados suportam o incremental refresh:

    • Delta tabelas, incluindo Unity Catalog gerenciar tabelas e tabelas externas apoiadas por Delta Lake.

    • Visualização materializada.

    • tabelas de transmissão, incluindo os alvos de APPLY CHANGES INTO operações.

  • Algumas operações incrementais do refresh exigem que o acompanhamento de linhas seja ativado na fonte de dados consultada. O acompanhamento de linhas é um recurso do site Delta Lake suportado somente por tabelas do site Delta, que incluem a visualização materializada, tabelas de transmissão e tabelas de gerenciar do site Unity Catalog. Consulte Usar acompanhamento de linha para Delta tables.

Tipos de atualização para visualização materializada

A atualização da visualização materializada é completa ou incremental. Para todas as operações, os resultados de um refresh incremental e de um refresh completo são os mesmos. Databricks execução de uma análise de custos para identificar se as mudanças na fonte de dados exigem um refresh completo.

Para determinar qual tipo de refresh uma atualização usou, consulte Determinar o tipo de refresh de uma atualização.

Atualização completa

Um refresh completo sobrescreve os resultados no view materializado, reprocessando todos os dados disponíveis na fonte. Todas as visualizações materializadas podem ser totalmente atualizadas em uma determinada atualização, dependendo de como a fonte de dados foi alterada.

O senhor pode, opcionalmente, forçar um refresh completo. Para a visualização materializada definida usando Databricks SQL, use a seguinte sintaxe:

REFRESH MATERIALIZED VIEW mv_name FULL

Para a visualização materializada definida em um Delta Live Tables pipeline, o senhor pode optar por executar um refresh completo em um conjunto de dados selecionado ou em todos os conjuntos de dados em um pipeline. Consulte Como o site Delta Live Tables atualiza tabelas e visualizações.

Importante

Quando um refresh completo é executado em uma fonte de dados cujos registros foram removidos devido ao limite de retenção de dados ou à exclusão manual, os registros removidos não são refletidos nos resultados da computação. Talvez você não consiga recuperar dados antigos se eles não estiverem mais disponíveis na fonte.

Observação

Opcionalmente, o senhor pode desativar a atualização completa em uma tabela definindo a propriedade pipelines.reset.allowed da tabela como false.

Atualização incremental

Um refresh incremental processa as alterações nos dados subjacentes após o último refresh e, em seguida, anexa esses dados à tabela. Dependendo das tabelas de base e das operações incluídas, somente determinados tipos de visualização materializada podem ser atualizados de forma incremental.

Somente a visualização materializada atualizada usando o pipeline serverless pode usar o incremental refresh. A visualização materializada que não usa o pipeline serverless é sempre totalmente atualizada.

Quando as visualizações materializadas são criadas usando SQL warehouse ou serverless Delta Live Tables pipeline, elas são automaticamente atualizadas de forma incremental se as consultas forem compatíveis. Se uma consulta incluir expressões não suportadas para um refresh incremental, será realizado um refresh completo, o que pode resultar em custos adicionais.

Suporte para atualização incremental da visualização materializada

A tabela a seguir lista o suporte ao incremental refresh por palavra-chave ou cláusula SQL.

Importante

Algumas palavras-chave e cláusulas exigem que o acompanhamento de linhas esteja ativado na fonte de dados consultada. Consulte Usar acompanhamento de linha para Delta tables.

Essas palavras-chave e cláusulas estão marcadas com uma estrela (*) na tabela a seguir.

Palavra-chave ou cláusula SQL

Suporte para incrementos refresh

SELECT expressões*

Sim, há suporte para expressões que incluem funções integradas determinísticas e funções definidas pelo usuário (UDFs) imutáveis.

GROUP BY

Sim

WITH

Sim, há suporte para expressões de tabela comuns.

UNION ALL*

Sim

FROM

As tabelas de base compatíveis incluem tabelas Delta, exibição materializada e tabelas de transmissão.

WHERE, HAVING*

Há suporte para cláusulas de filtro, como WHERE e HAVING.

INNER JOIN*

Sim

LEFT OUTER JOIN

Sim

FULL OUTER JOIN

Sim

RIGHT OUTER JOIN

Sim

OVER

Sim. As colunas PARTITION_BY devem ser especificadas para incrementação em funções de janela.

QUALIFY

Sim

EXPECTATIONS

Não. As visualizações materializadas que usam expectativas são sempre totalmente atualizadas.

Observação

Funções não determinísticas, por exemplo, CURRENT_TIMESTAMP, não são suportadas.

Determinar o tipo de atualização de uma atualização

Para otimizar o desempenho da atualização materializada do view, o Databricks usa um modelo de custo para selecionar a técnica usada para o refresh. A tabela a seguir descreve essas técnicas:

Técnica

Incremental refresh?

Descrição

FULL_RECOMPUTE

Não

O site view materializado foi totalmente recalculado

NO_OP

Não aplicável

O site materializado view não foi atualizado porque não foram detectadas alterações na tabela base.

ROW_BASED ou PARTITION_OVERWRITE

Sim

O site materializado view foi atualizado de forma incremental usando a técnica especificada.

Para determinar a técnica usada, consulte o evento Delta Live Tables log onde o event_type é planning_information:

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
ORDER BY
  timestamp desc;

Substitua <fully-qualified-table-name> pelo nome totalmente qualificado do site materializado view, incluindo o catálogo e o esquema.

Consulte O que é o registro de eventos do Delta Live Tables?