Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
As atualizações são executadas em computação sem servidor
As operações de atualização são executadas em pipelines sem servidor, independentemente se a operação foi definida no Databricks SQL ou com Lakeflow Spark Declarative Pipelines.
Para exibições materializadas definidas usando o Databricks SQL, o seu espaço de trabalho não precisa estar habilitado para pipelines declarativos do Lakeflow Spark sem servidor. A atualização usará automaticamente um fluxo de trabalho sem servidor.
Para exibições materializadas definidas usando Lakeflow Spark Declarative Pipelines, você deve configurar o pipeline para usar serverless. Consulte Configurar um pipeline 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.
Note
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 esta consulta em lote numa vista materializada:
CREATE OR REPLACE MATERIALIZED VIEW transaction_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 no transactions_table de origem para calcular os resultados.
Considerações sobre a fonte de dados para vistas 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:
Important
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 uma única 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.
- Operações de ingestão, como consultas que usam o Auto Loader para ingerir dados do armazenamento de objectos na cloud.
- 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.
- Tabelas de streaming, incluindo os alvos das operações
AUTO CDC ... INTO.
- 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 Use o rastreamento de linhas em tabelas Delta.
- As fontes de dados com filtros de linhas ou máscaras de coluna definidas não suportam a atualização incremental. Ver Filtros de linha e máscaras de coluna
Otimize 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:
Você pode definir esses recursos durante a criação ou posteriormente com a ALTER TABLE instrução. Por exemplo:
ALTER TABLE <table-name> SET TBLPROPERTIES (
delta.enableDeletionVectors = true,
delta.enableRowTracking = true,
delta.enableChangeDataFeed = true);
Tipos de atualização para exibições materializadas
Quando uma exibição materializada é atualizada, você pode especificar uma atualização ou uma atualização completa.
- Uma atualização tenta fazer uma atualização incremental, mas fará um recálculo completo dos dados, se necessário. A atualização incremental só está disponível quando a computação à qual você está conectado não tem servidor.
- Uma atualização completa sempre recalcula todas as entradas para a exibição materializada e redefine todos os pontos de verificação.
Para determinar que tipo de atualização uma atualização utilizou, consulte Determine o tipo de atualização de uma atualização.
Atualização padrão
A atualização padrão para uma exibição materializada em serverless tenta executar uma 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. Se uma atualização incremental não for possível ou se a computação conectada for clássica em vez de sem servidor, uma recomputação completa será executada.
A saída de uma atualização incremental e um recálculo completo são os mesmos. O Azure Databricks executa uma análise de custos para escolher a opção mais barata entre uma atualização incremental e uma recomputação completa.
Somente vistas materializadas que são atualizadas usando pipelines sem servidor podem utilizar a atualização incremental. As exibições materializadas que não usam pipelines sem servidor são sempre totalmente recalculadas.
Quando você cria exibições materializadas com um SQL warehouse ou pipelines declarativos do Lakeflow Spark sem servidor, o Azure Databricks as atualiza incrementalmente se suas consultas forem suportadas. Se uma consulta usar expressões sem suporte, o Azure Databricks executará uma recomputação completa, o que pode aumentar os custos.
Para determinar que tipo de atualização uma atualização utilizou, consulte Determine o tipo de atualização de uma atualização.
Atualização completa
Uma atualização completa substitui os resultados na visualização materializada limpando a tabela e os pontos de verificação e reprocessando todos os dados disponíveis na fonte.
Para executar uma atualização completa em exibições materializadas definidas usando Databricks SQL, use a seguinte sintaxe:
REFRESH MATERIALIZED VIEW mv_name FULL
Para exibições materializadas definidas em Lakeflow Spark Declarative Pipelines, 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 semântica de atualização do pipeline.
Important
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. Isso também pode alterar o esquema para colunas que não existem mais nos dados de origem.
Suporte para atualização incremental de visualização materializada
A tabela a seguir lista o suporte para atualização incremental por palavra-chave ou cláusula SQL.
Important
Algumas palavras-chave e cláusulas exigem que o rastreamento de linhas seja habilitado nas fontes de dados consultadas. Consulte Use o rastreamento de linhas em 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 |
Yes |
WITH |
Sim, expressões de tabela comuns são suportadas. |
UNION ALL* |
Yes |
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* |
Yes |
LEFT OUTER JOIN* |
Yes |
FULL OUTER JOIN* |
Yes |
RIGHT OUTER JOIN* |
Yes |
OVER |
Yes.
PARTITION_BY colunas devem ser especificadas para incrementalização em funções de janela. |
QUALIFY |
Yes |
EXPECTATIONS |
Sim, as visualizações materializadas que incluem expectativas podem ser atualizadas gradualmente. No entanto, a atualização incremental não é suportada para os seguintes casos:
|
| Funções não determinísticas | Funções de tempo não determinísticas são suportadas em WHERE cláusulas. Isso inclui funções como current_date(), current_timestamp()e now(). Outras funções não determinísticas não são suportadas. |
| Fontes não-Delta | Não há suporte para fontes como volumes, locais externos e catálogos estrangeiros. |
Determinar o tipo de 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:
| Technique | Atualização incremental? | Description |
|---|---|---|
FULL_RECOMPUTE |
No | 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. |
Qualquer um dos seguintes:
|
Yes | A visão materializada foi atualizada de forma incremental usando a técnica especificada. |
Para determinar a técnica usada, consulte o log de eventos Lakeflow Spark Declarative Pipelines 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.
Saída de exemplo para este comando:
-
- carimbo de data/hora
- mensagem
-
2025-03-21T22:23:16.497+00:00Flow 'sales' has been planned in :re[LDP] to be executed as ROW_BASED.
Consulte Log de eventos do pipeline.