Quando usar vistas REPLACE WHERE vs. materializadas

Tanto os fluxos REPLACE WHERE como as vistas materializadas autónomas permitem manter tabelas derivadas que se mantêm atualizadas à medida que os dados de origem mudam, mas resolvem problemas diferentes. Para a maioria das cargas de trabalho batch extract, transform and load (ETL) que periodicamente sobrescrevem uma janela temporal ou uma partição, utiliza-se um fluxo REPLACE WHERE incremental. Utilize vistas materializadas para uma camada de aceleração de consultas que fornece resultados pré-computados a dashboards e relatórios.

Esta página abrange tabelas de streaming independentes e vistas materializadas. Para fluxos REPLACE WHERE num pipeline Lakeflow, veja processamento em lote com fluxos REPLACE WHERE.

Utilize REPLACE WHERE para sobrescrições em lote

Um fluxo REPLACE WHERErecalcula e sobrescreve apenas as linhas que correspondem a um predicado, como uma janela temporal ou uma partição. Todas as outras linhas permanecem intocadas. Como o fluxo reavalia a consulta de origem apenas para esse intervalo de predicados, o custo de cada atualização depende do tamanho do intervalo, não do tamanho da tabela.

Uma visão materializada mantém o resultado completo da consulta que a define. O Azure Databricks atualiza uma vista materializada de forma incremental quando a consulta e os dados de origem a suportam, e de resto executa uma atualização completa. Se uma atualização é incremental depende da estrutura da consulta e das tabelas de origem, pelo que o custo de cada atualização é mais difícil de prever. Veja Como as visualizações materializadas autónomas são renovadas?.

Para um modelo de dados ETL em lote que muda em intervalos delimitados, um fluxo REPLACE WHERE permite-te controlar exatamente quais as linhas que cada refresh reescreve. Uma vista materializada é a melhor opção quando os leitores precisam de acesso rápido a um resultado pré-computado.

Constructos do mapa para camadas da arquitetura medallion

A tabela seguinte mapeia cada camada de uma arquitetura medallion para o construto que o Databricks recomenda:

Camada Construir Porquê
Bronze (importação em bruto) Ingestão com Lakeflow Connect ou Auto Loader Regista registos brutos de forma incremental à medida que chegam, sem reprocessar o histórico.
Prata (factos) Fluxo incremental REPLACE WHERE Sobrescreve apenas as janelas temporais ou partições afetadas para atualizações de factos, dados que chegam tarde e correções.
Prata (dimensões) AUTO CDC Escoamento Aplica semânticas de inserção, atualização e eliminação automaticamente e preserva o histórico com dimensão de evolução lenta (SCD) Tipo 1 ou Tipo 2.
Ouro (agregações e modelos de dados) Fluxo REPLACE WHERE incremental Recalcula apenas o intervalo de predicados para agregados e modelos, evitando recálculos de tabela completa.
Aceleração de consultas e fornecimento visão materializada Serve os resultados pré-computados para painéis e relatórios e mantém os resultados das consultas atualizados.

Guia de decisão

Utilize o guia seguinte para escolher entre os dois construtos.

Utilize um fluxo SUBSTITUIR WHERE quando:

  • Execute sobrescrições periódicas em lote de uma janela temporal ou partição.
  • Corrija os dados recebidos com atraso.
  • Aplicar eliminações de conformidade a um intervalo delimitado.
  • Atualize os dados ao nível da partição.

Utilize uma vista materializada quando:

  • Acelere as consultas no dashboard.
  • Servir agregações pré-computadas aos leitores.
  • Mantenha os resultados das consultas atualizados para uma camada de disponibilização.

Exemplo: sobrescrição incremental com REPLACE WHERE

O exemplo seguinte define uma tabela alvo que sobrescrive apenas os últimos 7 dias de dados em cada atualização. Durante a atualização, o fluxo elimina as linhas correspondentes ao predicado, recalcula a consulta de origem para esse mesmo intervalo e insere os resultados. As linhas fora da janela ficam intocadas:

CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;

BY NAME é necessário para que as colunas coincidam pelo nome e não pela posição. Para a sintaxe completa, sobreposições de predicados, backfills e comportamento de atualização incremental, veja fluxos REPLACE WHERE para tabelas de streaming autónomas.

Recursos adicionais