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.

Diagrama que mostra como a visualização materializada funciona

A visualização materializada é definida e atualizada por um único Delta Live Tables pipeline. Ao criar um Delta Live Tables 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 Delta Live Tables 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 cloud.

Materialized view example

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.

Materialized view exemplo de atualização incremental

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.