Pular para o conteúdo principal

Visualizações materializadas

Assim como as visões padrão, as visões materializadas são os resultados de uma consulta e você acessa a elas da mesma forma que acessaria uma tabela. Ao contrário das visões padrão, que recalculam os resultados a cada consulta, as visões materializadas armazenam os resultados em cache e os atualizam em um intervalo especificado. Como uma visão materializada é pré-computada, as consultas a ela podem ter uma execução muito mais rápida do que as consultas a visões regulares.

Para obter orientações sobre quando usar visualizações materializadas versus tabelas de streaming ou visualizações, consulte O que são pipelines?.

Uma view materializada é um objeto de pipeline declarativo. Inclui uma consulta que o define, um fluxo para atualizá-lo e os resultados em cache para acesso rápido. Uma visualização materializada:

  • Acompanha alterações em dados upstream.
  • Quando acionado, processa incrementalmente os dados alterados e aplica as transformações necessárias.
  • A tabela de saída é mantida, em sincronia com os dados de origem, com base em um intervalo de refresh especificado.

Visualizações materializadas são uma boa opção para muitas transformações:

  • Aplica-se raciocínio sobre os resultados em cache em vez de linhas. Na verdade, basta escrever uma consulta.
  • São sempre corretos no momento da atualização. Todos os dados necessários são processados, mesmo que cheguem atrasados ou fora de ordem.
  • Frequentemente são incrementais. Databricks tenta escolher a estratégia apropriada que minimiza o custo de atualização de uma view materializada.

Como funcionam as visualizações materializadas

O diagrama a seguir ilustra como funcionam as visualizações materializadas.

Diagrama que mostra o funcionamento dos modelos.

Visualizações materializadas são definidas e atualizadas por um único pipeline. É possível definir explicitamente visualizações materializadas no código-fonte do pipeline. Tabelas definidas por um pipeline não podem ser alteradas ou atualizadas por qualquer outro pipeline.

nota

Quando você cria uma view materializada autônoma, fora dos pipelines declarativos do Lakeflow Spark, o Databricks cria um pipeline que é usado para atualizar a view. É possível visualizar o pipeline ao selecionar **Jobs e pipelines** na navegação à esquerda no workspace. Você pode adicionar a coluna **Tipo de pipeline** à sua view. Exibições materializadas definidas em um pipeline têm um tipo de ETL. Visualizações materializadas autônomas têm um tipo de MV/ST. Consulte Utilizar visões materializadas autônomas.

O Databricks utiliza o Unity Catalog para armazenar metadados sobre a view, incluindo a query e views de sistema adicionais para atualizações incrementais. O Databricks materializa os dados em cache no armazenamento em nuvem.

nota

Databricks cria tabelas internas para dar suporte ao refresh incremental de views materializadas. Estas tabelas aparecem em system.information_schema.tables, mas não estão visíveis no Catalog Explorer ou em outras interfaces de usuário do workspace.

O exemplo a seguir join duas tabelas e mantém o resultado atualizado usando uma view materializada.

Python
from pyspark import pipelines as dp

@dp.materialized_view
def regional_sales():
partners_df = spark.read.table("partners")
sales_df = spark.read.table("sales")

return (
partners_df.join(sales_df, on="partner_id", how="inner")
)

Atualizações automáticas incrementais

Quando o pipeline que define uma view materializada é acionado, a view é automaticamente mantida atualizada, frequentemente de forma incremental. A Databricks tenta processar apenas os dados que devem ser processados para manter a visualização materializada atualizada. Uma view materializada sempre mostra o resultado correto, mesmo que exija a recomputação completa do resultado da consulta do zero, mas, muitas vezes, o Databricks faz apenas atualizações incrementais em uma view materializada, o que pode ser muito menos dispendioso do que uma recomputação completa.

O diagrama abaixo mostra uma materialized view chamada sales_report, que é o resultado da junção de duas tabelas upstream chamadas clean_customers e clean_transactions, e agrupando por país. Um processo a montante insere 200 linhas em clean_customers em três países (EUA, Países Baixos, Reino Unido) e atualiza 5.000 linhas em clean_transactions correspondentes a esses novos clientes. A sales_report view materializada é atualizada de forma incremental somente para os países que têm novos clientes ou transações correspondentes. Neste exemplo, três linhas são atualizadas em vez do relatório de vendas completo.

Exemplo de atualização incremental de MV

Para mais detalhes sobre como a atualização incremental funciona em visualizações materializadas, consulte Atualização incremental para visualizações materializadas.

Limitações das visualizações materializadas

Visualizações materializadas têm as seguintes limitações:

  • Como as atualizações criam consultas corretas, algumas mudanças nas entradas exigirão uma recomputação completa de uma visualização materializada, o que pode ser custoso.
  • Não são projetados para casos de uso de baixa latência. A latência de atualização de uma view materializada é de segundos ou minutos, não de milissegundos.
  • Nem todas as computações podem ser computadas incrementalmente.
  • Databricks tenta detectar quando uma UDF usada em uma view materializada altera o comportamento e realizar um refresh completo para aplicar a UDF atualizada. No entanto, UDFs que chamam outras funções ou bibliotecas podem alterar o comportamento de maneiras que o Databricks não reconhece. É um exemplo disso quando uma biblioteca chamada é atualizada. Quando o comportamento de uma UDF muda, é sua responsabilidade realizar um refresh completo em qualquer view materializada que a utilize.
  • As visualizações materializadas não oferecem suporte a CLONE. Não é possível usar uma view materializada como origem ou destino de um clone profundo ou raso. Para obter mais informações, consulte Limitações.

Recursos adicionais