Visualização materializada
Assim como a visualização padrão, a visualização materializada é o resultado de uma consulta e o senhor a acessa da mesma forma que acessaria uma tabela. Diferentemente da visualização padrão, que recompõe os resultados a cada consulta, a visualização materializada armazena os resultados em cache e os atualiza em um intervalo especificado. Como um view materializado é pré-calculado, as consultas contra ele podem ser executadas muito mais rapidamente do que contra uma visualização regular.
Um view materializado é um objeto pipeline declarativo. Ele inclui uma consulta que o define, um fluxo para atualizá-lo e os resultados em cache para acesso rápido. Um view materializado:
- Rastreia as mudanças nos dados upstream.
- Quando acionado, processa de forma incremental os dados alterados e aplica as transformações necessárias.
- Mantém a tabela de saída em sincronia com os dados de origem, com base em um intervalo especificado em refresh.
As visualizações materializadas são uma boa opção para muitas transformações:
- Você aplica o raciocínio em resultados em cache em vez de linhas. Na verdade, você simplesmente escreve uma consulta.
- Eles estão sempre corretos. Todos os dados necessários são processados, mesmo que cheguem atrasados ou fora de ordem.
- Eles geralmente são incrementais. Databricks tentará escolher a estratégia adequada que minimiza o custo de atualização de um materializado view.
Como funciona a visualização materializada
O diagrama a seguir ilustra o funcionamento da visualização materializada.
A visualização materializada é definida e atualizada por um único DLT pipeline. Ao criar um DLT pipeline, o senhor pode definir explicitamente a visualização materializada no código-fonte do pipeline. As tabelas definidas por um pipeline não podem ser alteradas ou atualizadas por nenhum outro pipeline.
Quando o senhor cria um view materializado fora de um pipeline em Databricks SQL, Databricks cria um DLT pipeline oculto que é usado para atualizar esse view.
Databricks usa o site Unity Catalog para armazenar metadados sobre o site view, incluindo a consulta e a visualização adicional do sistema que são usadas para atualizações incrementais. Os dados em cache são materializados no armazenamento em nuvem.
O exemplo a seguir une duas tabelas e mantém o resultado atualizado usando um view materializado.
- Python
- SQL
import dlt
@dlt.table
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")
)
Se o senhor usar uma ou mais invocações de spark.readStream
no método, ele transformará a view em uma tabela de transmissão em vez de uma view materializada.
CREATE OR REPLACE MATERIALIZED VIEW regional_sales
AS SELECT *
FROM partners
INNER JOIN sales ON
partners.partner_id = sales.partner_id;
Atualizações incrementais automáticas
Quando o pipeline que define um view materializado é acionado, o view é automaticamente atualizado, geralmente de forma incremental. Databricks tenta processar somente os dados que devem ser processados para manter o site materializado view atualizado. Um view materializado sempre mostra o resultado correto, mesmo que exija a recomputação completa do resultado da consulta a partir do zero, mas muitas vezes o Databricks faz apenas atualizações incrementais em um view materializado, o que pode ser muito menos dispendioso do que uma recomputação completa.
O diagrama abaixo mostra um view materializado chamado sales_report
, que é o resultado da união de duas tabelas upstream chamadas clean_customers
e clean_transactions
, e do agrupamento por país. Um processo upstream insere 200 linhas em clean_customers
em três países (EUA, Holanda, Reino Unido) e atualiza 5.000 linhas em clean_transactions
correspondentes a esses novos clientes. O sales_report
materializado view é atualizado de forma incremental somente para os países que têm novos clientes ou transações correspondentes. Neste exemplo, vemos três linhas atualizadas em vez de todo o relatório de ventas.
Para obter mais detalhes sobre como o refresh incremental funciona na visualização materializada, consulte Incremental refresh for materialized view.
Limitações da visualização materializada
A visualização materializada tem as seguintes limitações:
- Como as atualizações criam consultas corretas, algumas alterações nas entradas exigirão uma recomputação completa de um materializado view, o que pode ser caro.
- Eles não foram projetados para casos de uso de baixa latência. A latência da atualização de um site materializado view é em segundos ou minutos, não em milissegundos.
- Nem todos os cálculos podem ser computados de forma incremental.