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 oferecem suporte à atualização incremental. Inclui discussão sobre as diferenças entre atualizações incrementais e completas e inclui recomendações para escolher entre visualizaçõ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 detetando 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 Delta Live Tables, você deve configurar o pipeline para usar serverless. Consulte Configurar um pipeline Delta Live Tables sem servidor.
Quais são as semânticas de atualização para visualizações materializadas?
Visualizaçõ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 Azure Databricks, o resultado é calculado usando semântica em 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.
Nota
Alguns produtos do Azure Databricks armazenam em cache os resultados 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 visualizações materializadas.
O exemplo a seguir transforma essa consulta em lote em uma exibição materializada:
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 você atualiza uma exibição materializada, o resultado calculado é idêntico à semântica da 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 fonte 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 relação a qualquer fonte de dados, nem todas as fontes de dados são adequadas para exibições materializadas. Considere as seguintes ressalvas e recomendações:
Importante
As visualizações materializadas fazem uma tentativa de melhor esforço para atualizar incrementalmente os resultados das operações suportadas. 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 semântica de atualização completa, mesmo que a consulta que define a exibição materializada ofereça suporte à atualização incremental.
- Para consultas em que uma atualização completa seria proibitiva em termos de custo, use tabelas de streaming para garantir o processamento exatamente uma vez. Os exemplos incluem tabelas muito grandes.
- Não defina uma visão materializada em relação a uma fonte de dados se os registros só devem ser processados 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 Kafka.
- Ingerir operações, como consultas que usam o Auto Loader 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 onde você planeja excluir registros anteriores a um determinado limite.
- Nem todas as fontes de dados oferecem suporte a atualizações incrementais. As seguintes fontes de dados oferecem suporte à atualização incremental:
- Tabelas Delta, incluindo tabelas gerenciadas pelo Unity Catalog e tabelas externas apoiadas pelo Delta Lake.
- Visões materializadas.
- Streaming de tabelas, incluindo os alvos das
APPLY CHANGES INTO
operações.
- Algumas operações de atualização incremental exigem que o rastreamento de linhas seja habilitado nas fontes de dados consultadas. O rastreamento de linhas é um recurso Delta Lake suportado apenas por tabelas Delta, que incluem exibições materializadas, tabelas de streaming e tabelas gerenciadas pelo Unity Catalog. Consulte Usar rastreamento de linha para tabelas Delta.
Otimize as visualizaçõ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 uma atualização completa são os mesmos. O Azure Databricks executa uma análise de custos 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 visualização materializada reprocessando todos os dados disponíveis na fonte. Todas as visualizaçõ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 Databricks SQL, use a seguinte sintaxe:
REFRESH MATERIALIZED VIEW mv_name FULL
Para exibições materializadas definidas em um pipeline 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 Como o Delta Live Tables atualiza tabelas e exibições.
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 computados. Talvez você não consiga recuperar dados antigos se os dados não estiverem mais disponíveis na fonte.
Nota
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, apenas certos tipos de exibições materializadas podem ser atualizadas 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 um pipeline Delta Live Tables sem servidor, elas são atualizadas automaticamente de forma incremental se suas consultas forem suportadas. 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. Consulte Usar rastreamento de linha para tabelas Delta.
Estas palavras-chave e cláusulas estão marcadas com uma estrela (*) na tabela seguinte.
Palavra-chave ou cláusula SQL | Suporte para atualização incremental |
---|---|
SELECT Expressões* |
Sim, expressões incluindo funções incorporadas determinísticas e funções definidas pelo usuário (UDFs) imutáveis são suportadas. |
GROUP BY |
Sim |
WITH |
Sim, expressões de tabela comuns são suportadas. |
UNION ALL * |
Sim |
FROM |
As tabelas base suportadas incluem tabelas Delta, vistas materializadas e tabelas de streaming. |
WHERE , HAVING * |
Cláusulas de filtro como WHERE e HAVING são suportadas. |
INNER JOIN * |
Sim |
LEFT OUTER JOIN * |
Sim |
FULL OUTER JOIN * |
Sim |
RIGHT OUTER JOIN * |
Sim |
OVER |
Sim. PARTITION_BY As colunas devem ser especificadas para incrementalização em funções de janela. |
QUALIFY |
Sim |
EXPECTATIONS |
N.º Visões materializadas que usam expectativas são sempre totalmente atualizadas. |
Nota
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 de 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 essas técnicas:
Técnica | Atualização incremental? | Description |
---|---|---|
FULL_RECOMPUTE |
Não | A visão materializada foi totalmente recalculada |
NO_OP |
Não aplicável | A vista materializada não foi atualizada porque não foram detetadas alterações à tabela base. |
ROW_BASED ou PARTITION_OVERWRITE |
Sim | A visão materializada foi incrementalmente atualizada usando a técnica especificada. |
Para determinar a técnica usada, consulte o log de eventos Delta Live Tables 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 da exibição materializada, incluindo o catálogo e o esquema.