Quando usar REPLACE WHERE vs. visualizações materializadas
Os fluxos REPLACE WHERE e as visualizações materializadas autônomas permitem que você mantenha tabelas derivadas que permanecem atualizadas à medida que os dados de origem mudam, mas eles resolvem problemas diferentes. Para a maioria das cargas de trabalho de extração, transformação e carregamento (ETL) em lote que sobrescrevem periodicamente uma janela de tempo ou uma partição, use um fluxo REPLACE WHERE incremental. Use visualizações materializadas para uma camada de aceleração de query que fornece resultados pré-computados para dashboards e relatórios.
Esta página cobre tabelas de transmissão autônomas e views materializadas. Para fluxos REPLACE WHERE em um pipeline LakeFlow, consulte Processamento em lote com fluxos REPLACE WHERE.
Usar REPLACE WHERE para substituições em lote
Um fluxo REPLACE WHERE recalcula e sobrescreve somente as linhas que correspondem a um predicado, como uma janela de tempo ou uma partição. Todas as outras linhas permanecem intocadas. Como o fluxo reavalia a query de origem apenas para esse intervalo de predicado, o custo de cada refresh depende do tamanho do intervalo, não do tamanho da tabela.
Uma view materializada mantém o resultado completo da sua query de definição. O Databricks faz refresh de uma view materializada incrementalmente quando a query e os dados de origem permitem isso; caso contrário, ele faz um refresh completo. Se um refresh é incremental ou não, isso depende da estrutura da query e das tabelas de origem; portanto, é mais difícil prever o custo de cada refresh. Consulte Como as visualizações materializadas autônomas são atualizadas?.
Para um modelo de dados ETL em lote que muda em intervalos delimitados, um fluxo REPLACE WHERE permite que você controle exatamente quais linhas cada refresh sobrescreve. Uma view materializada é mais adequada quando os leitores precisam de acesso rápido a um resultado pré-computado.
Mapear construções para camadas medallion
A tabela abaixo mapeia cada camada de uma arquitetura medallion para o constructo que o Databricks recomenda:
Camada | Construir | Por que |
|---|---|---|
Bronze (ingestão bruta) | Ingestão com Lakeflow Connect ou Auto Loader | Registros brutos de terras incrementalmente à medida que chegam, sem reprocessar a história. |
Silver (fatos) | Fluxo REPLACE WHERE incremental | Substitui apenas as janelas de tempo ou partições afetadas para atualizações de fatos, dados que chegam com atraso e correções. |
Silver (dimensões) | Aplica automaticamente semântica de inserção, atualização e exclusão e preserva a história com dimensão de alteração lenta (SCD) Tipo 1 ou Tipo 2. | |
ouro (agregações e modelos de dados) | Fluxo REPLACE WHERE incremental | Recalcula apenas o intervalo de predicado para agregados e modelos, evitando recálculos de tabela completa. |
Aceleração e disponibilização de query | Fornece resultados pré-computados para dashboards e relatórios e mantém os resultados da query atualizados. |
Guia de decisão
Use o guia a seguir para escolher entre as duas construções.
Use um fluxo REPLACE WHERE quando você:
- Execução substituições periódicas em lotes de uma janela de tempo ou partição.
- Corrigir dados que chegam com atraso.
- Aplicar exclusões de compliance a um intervalo limitado.
- Refresh dados no nível da partição.
Use uma view materializada quando você:
- Acelere queries de dashboards.
- Disponibilize agregações pré-computadas para os leitores.
- Mantenha os resultados da query atualizados para uma camada de serviço.
Exemplo: substituição incremental com REPLACE WHERE
O exemplo a seguir define uma tabela de destino que substitui apenas os últimos 7 dias de dados a cada refresh. Durante o refresh, o fluxo exclui as linhas que correspondem ao predicado, recalcula a query de origem para esse mesmo intervalo e insere os resultados. As linhas fora da janela permanecem 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 correspondam por nome em vez de por posição. Para obter a sintaxe completa, substituições de predicado, preenchimentos retroativos e comportamento de refresh incremental, consulte Fluxos REPLACE WHERE para tabelas de transmissão autônomas.