Compartilhar via


Atualização incremental para exibições materializadas

Este artigo descreve a semântica e os requisitos para atualizações incrementais em exibições materializadas e identifica as operações, palavras-chave e cláusulas SQL que dão suporte à atualização incremental. Ele inclui discussão sobre as diferenças entre atualizações incrementais e completas e inclui recomendações para escolher entre exibições materializadas e tabelas de streaming.

Ao executar atualizações em exibições materializadas usando pipelines sem servidor, muitas consultas podem ser atualizadas incrementalmente. As atualizações incrementais economizam custos de computação detectando alterações nas fontes de dados usadas para definir a exibição materializada e calculando incrementalmente o resultado.

Pipelines sem servidor são necessários para atualização incremental

A atualização incremental para exibições materializadas requer pipelines sem servidor.

As operações de atualização para exibições materializadas definidas no Databricks SQL sempre são executadas usando pipelines sem servidor.

Para exibições materializadas definidas usando pipelines do Delta Live Tables, você deve configurar o pipeline para usar sem servidor. Consulte Configurar um pipeline do Delta Live Tables sem servidor.

Quais são as semânticas de atualização para exibições materializadas?

As exibições materializadas garantem resultados equivalentes às consultas em lote. 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 você executa essa consulta usando qualquer produto do Azure Databricks, o resultado é calculado usando a semântica do lote para agregar todos os registros na origem transactions_table, o que significa que todos os dados de origem são verificados e agregados em uma operação.

Observação

Alguns produtos do Azure Databricks armazenam os resultados em cache automaticamente dentro ou entre sessões se as fontes de dados não tiverem sido alteradas após a execução da última consulta. Os comportamentos de cache automático diferem das exibições materializadas.

O exemplo a seguir transforma essa consulta em lote em uma exibição materializada:

CREATE OR REPLACE 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 você atualiza uma exibição materializada, o resultado calculado é idêntico à semântica de consulta em lote. Essa consulta é um exemplo de uma exibição materializada que pode ser atualizada incrementalmente, o que significa que a operação de atualização faz uma tentativa de melhor esforço para processar apenas dados novos ou alterados na origem transactions_table para calcular os resultados.

Considerações sobre a fonte de dados para exibições materializadas

Embora você possa definir uma exibição materializada em qualquer fonte de dados, nem todas as fontes de dados são adequadas para exibições materializadas. Considere as seguintes advertências e recomendações:

Importante

As exibições materializadas fazem uma tentativa de melhor esforço para atualizar incrementalmente os resultados das operações com suporte. Algumas alterações nas fontes de dados exigem uma atualização completa.

Todas as fontes de dados para exibições materializadas devem ser robustas para a semântica de atualização completa, mesmo que a consulta que define a exibição materializada dê suporte à atualização incremental.

  • Para consultas em que uma atualização completa teria um custo proibitivo, use tabelas de streaming para garantir o processamento exatamente uma vez. Os exemplos incluem tabelas muito grandes.
  • Não defina uma exibição materializada em uma fonte de dados se os registros precisarem ser processados apenas uma vez. Em vez disso, use tabelas de streaming. Os exemplos incluem o seguinte:
    • Fontes de dados que não retêm o histórico de dados, como o Kafka.
    • Operações de ingestão, como consultas que usam o Carregador Automático para ingerir dados do armazenamento de objetos na nuvem.
    • Qualquer fonte de dados em que você 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 você planeja excluir registros mais antigos do que um determinado limite.
  • Nem todas as fontes de dados dão suporte a atualizações incrementais. As seguintes fontes de dados dão suporte à atualização incremental:
    • Tabelas delta, incluindo tabelas gerenciadas pelo Catálogo do Unity e tabelas externas apoiadas pelo Delta Lake.
    • Exibições materializadas.
    • Tabelas de streaming, incluindo os destinos das APPLY CHANGES INTO operações.
  • Algumas operações de atualização incremental exigem que o acompanhamento de linhas seja habilitado nas fontes de dados consultadas. O rastreamento de linhas é um recurso do Delta Lake compatível apenas com tabelas Delta, que incluem exibições materializadas, tabelas de streaming e tabelas gerenciadas pelo Catálogo do Unity. Confira Usar o acompanhamento de linhas para tabelas Delta.

Otimizar exibições materializadas

Para obter o melhor desempenho, o Databricks recomenda habilitar os seguintes recursos em todas as tabelas de origem de exibição materializadas:

Tipos de atualização para exibições materializadas

As atualizações para exibições materializadas são completas ou incrementais. Para todas as operações, os resultados de uma atualização incremental e de uma atualização completa são os mesmos. O Azure Databricks executa uma análise de custo para identificar se as alterações nas fontes de dados exigem uma atualização completa.

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

Atualização completa

Uma atualização completa substitui os resultados na exibição materializada reprocessando todos os dados disponíveis na origem. Todas as exibições materializadas podem ser totalmente atualizadas em qualquer atualização, dependendo de como as fontes de dados foram alteradas.

Opcionalmente, você pode forçar uma atualização completa. Para exibições materializadas definidas usando o Databricks SQL, use a seguinte sintaxe:

REFRESH MATERIALIZED VIEW mv_name FULL

Para exibições materializadas definidas em um pipeline do Delta Live Tables, você pode optar por executar uma atualização completa em conjuntos de dados selecionados ou em todos os conjuntos de dados em um pipeline. Consulte a Semântica de atualização do pipeline.

Importante

Quando uma atualização completa é executada em uma fonte de dados em que os 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 calculados. Talvez você não consiga recuperar dados antigos se os dados não estiverem mais disponíveis na origem.

Observação

Opcionalmente, você pode desabilitar as atualizações completas em uma tabela definindo a propriedade pipelines.reset.allowed table como false.

Atualização incremental

Uma atualização incremental processa alterações nos dados subjacentes após a última atualização e, em seguida, acrescenta esses dados à tabela. Dependendo das tabelas base e das operações incluídas, somente determinados tipos de exibições materializadas podem ser atualizados incrementalmente.

Somente exibições materializadas atualizadas usando pipelines sem servidor podem usar a atualização incremental. As exibições materializadas que não usam pipelines sem servidor são sempre totalmente atualizadas.

Quando as exibições materializadas são criadas usando um SQL warehouse ou pipeline do Delta Live Tables sem servidor, elas são atualizadas automaticamente incrementalmente se houver suporte para suas consultas. Se uma consulta incluir expressões sem suporte para uma atualização incremental, uma atualização completa será executada, resultando potencialmente em custos adicionais.

Suporte para atualização incremental de exibição materializada

A tabela a seguir lista o suporte para atualização incremental por palavra-chave ou cláusula SQL.

Importante

Algumas palavras-chave e cláusulas exigem que o rastreamento de linhas seja habilitado nas fontes de dados consultadas. Confira Usar o acompanhamento de linhas para tabelas Delta.

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

Palavra-chave ou cláusula SQL Suporte para atualização incremental
Expressões SELECT* Sim, há suporte para expressões que incluem funções internas 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 base com suporte incluem tabelas Delta, exibições materializadas e tabelas de streaming.
WHERE, HAVING* Cláusulas de filtro como WHERE e HAVING têm suporte.
INNER JOIN* Sim
LEFT OUTER JOIN* Sim
FULL OUTER JOIN* Sim
RIGHT OUTER JOIN* Sim
OVER Sim. PARTITION_BY colunas devem ser especificadas para incrementalização em funções de janela.
QUALIFY Sim
EXPECTATIONS Não. As exibições materializadas que usam as expectativas são sempre totalmente atualizadas.

Observação

Não há suporte para funções não determinísticas, por exemplo CURRENT_TIMESTAMP.

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

Para otimizar o desempenho das atualizações de exibição materializadas, o Azure Databricks usa um modelo de custo para selecionar a técnica usada para a atualização. A tabela a seguir descreve estas técnicas:

Técnica Atualização incremental? Descrição
FULL_RECOMPUTE Não A exibição materializada foi totalmente recomputada
NO_OP Não aplicável A exibição materializada não foi atualizada porque nenhuma alteração na tabela base foi detectada.
ROW_BASED ou PARTITION_OVERWRITE Sim A exibição materializada foi atualizada incrementalmente usando a técnica especificada.

Para determinar a técnica usada, consulte o log de eventos do Delta Live Tables onde 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 da exibição materializada, incluindo o catálogo e o esquema.

Confira O que é o log de eventos do Delta Live Tables?.