Como funciona a visualização materializada
Assim como a visualização normal, a visualização materializada também é o resultado de uma consulta e o senhor pode acessá-la como faria com uma tabela. Enquanto as visualizações regulares são recalculadas a cada consulta, as visualizações materializadas são mantidas automaticamente atualizadas pelo site Databricks para evitar recálculos redundantes. Como um view materializado é pré-calculado, as consultas contra ele podem ser executadas muito mais rapidamente do que contra uma visualização regular.
As visualizações materializadas são uma boa opção para muitas transformações:
- O senhor raciocina sobre o conjunto de dados em vez de linhas. Na verdade, você simplesmente escreve uma consulta.
- Eles estão sempre corretos. Todos os dados 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.
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. Essas tabelas são então definidas por esse pipeline e não podem ser alteradas ou atualizadas por nenhum outro pipeline. Quando o senhor cria um view materializado em Databricks SQL, Databricks cria um DLT pipeline 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. Além disso, os dados são materializados no armazenamento em nuvem.
O exemplo a seguir une duas tabelas e mantém o resultado atualizado usando um view materializado. Se o senhor usar uma ou mais invocações spark.readStream
no método, ele transformará a view em uma tabela de transmissão em vez de uma view materializada.
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")
)
Atualizações incrementais automáticas
As visualizações materializadas são atualizadas automaticamente, muitas vezes de forma incremental. Databricks mantém automaticamente a visualização materializada atualizada à medida que as entradas ou a consulta são alteradas. Um view materializado sempre mostra o resultado correto, mesmo que seja necessário recomputar totalmente o resultado da consulta do zero. Frequentemente, o site Databricks faz 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
. 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 site materializado view chamado sales_report
é 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.
Limitações da visualização materializada
A visualização materializada tem as seguintes limitações:
- Como eles estão sempre corretos, algumas alterações nas entradas exigirão uma recomputação completa de um view materializado, 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.