Wanneer gebruik je REPLACE WHERE versus gematerialiseerde weergaven

Zowel REPLACE-flows WHERE als standalone materialized views laten je afgeleide tabellen bijhouden die actueel blijven naarmate brondata verandert, maar ze lossen verschillende problemen op. Voor de meeste batch-extract-, transformatie- en laadwerklasten (ETL) die periodiek een tijdsvenster of partitie overschrijven, gebruik je een incrementele REPLACE WHERE flow. Gebruik gematerialiseerde weergaven voor een query-versnellingslaag die vooraf berekende resultaten levert aan dashboards en rapporten.

Deze pagina behandelt op zichzelf staande streamingtabellen en gematerialiseerde weergaven. Voor REPLACE-stromen WHERE in een Lakeflow-pijpleiding, zie Batchverwerking met REPLACE-stromenWHERE.

Gebruik REPLACE WHERE voor batch-overschrijvingen

Een VERVANG-flow WHERE flow herberekent en overschrijft alleen de rijen die overeenkomen met een predicaat, zoals een tijdsvenster of een partitie. Alle andere rijen blijven onaangeroerd. Omdat de flow de bronquery opnieuw evalueert voor alleen dat predicaatbereik, hangen de kosten van elke verversing af van de grootte van het bereik, niet van de grootte van de tabel.

Een gematerialiseerde view behoudt het volledige resultaat van zijn definiƫrende query. Azure Databricks ververst een gematerialiseerde weergave incrementeel wanneer de query- en brondata dit ondersteunen, en voert anders een volledige verversing uit. Of een verversing incrementeel is, hangt af van de querystructuur en de brontabellen, waardoor de kosten van elke verversing moeilijker te voorspellen zijn. Zie Hoe worden op zichzelf staande gematerialiseerde weergaven ververst?.

Voor een batch ETL-datamodel dat verandert binnen begrensde bereiken, laat een VERVANG-flow WHERE je precies bepalen welke rijen bij elke verversing worden herschreven. Een gematerialiseerde view past beter wanneer lezers snelle toegang nodig hebben tot een vooraf berekend resultaat.

Wijs constructies toe aan medallion-lagen

De volgende tabel beeldt elke laag van een medaillonarchitectuur toe aan de construct die Databricks aanbeveelt:

Laag Bouwen Waarom
Brons (ruwe gegevensinname) Ingestie met Lakeflow Connect of Auto Loader Slaat ruwe records stapsgewijs op zodra ze binnenkomen, zonder de geschiedenis opnieuw te verwerken.
Zilver (feiten) Incrementele REPLACE-stroom WHERE Overschrijft alleen de getroffen tijdsvensters of partities, voor feitelijke updates, te laat aankomende data en correcties.
Zilver (dimensies) AUTO CDC flow Past automatisch insert-, update- en delete-semantiek toe en behoudt geschiedenis met langzaam veranderende dimensie (SCD) Type 1 of Type 2.
Goud (aggregaties en datamodellen) Incrementele flow VERVANGEN WHERE Berekent alleen het predicaatbereik voor aggregaten en modellen opnieuw, waarbij volledige tabelherberekeningen worden vermeden.
Queryversnelling en serveren gerealiseerde weergave Levert vooraf berekende resultaten aan dashboards en rapporten en houdt de queryresultaten actueel.

Beslissingshandleiding

Gebruik de volgende gids om te kiezen tussen de twee constructies.

Gebruik een VERVANG-flow WHERE wanneer je:

  • Voer periodieke overschrijvingen in batch uit van een tijdvenster of partitie.
  • Corrigeer laat binnengekomen gegevens.
  • Pas complianceverwijderingen toe binnen een begrensd bereik.
  • Ververs de gegevens op partitieniveau.

Gebruik een gematerialiseerde view wanneer je:

  • Versnel dashboardzoekopdrachten.
  • Geef vooraf berekende aggregaties aan lezers.
  • Houd de zoekresultaten actueel voor een servinglaag.

Voorbeeld: incrementele overschrijving met REPLACE WHERE

Het volgende voorbeeld definieert een doeltabel die bij elke verversing alleen de laatste 7 dagen aan data overschrijft. Tijdens het verversen verwijdert de flow de rijen die overeenkomen met het predicaat, berekent de bronquery voor datzelfde bereik opnieuw en voegt de resultaten in. De rijen buiten het venster blijven onaangeroerd:

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 is vereist zodat kolommen op naam overeenkomen in plaats van op positie. Voor de volledige syntaxis, predicaatoverrides, backfills en incrementele verversingsgedrag, zie REPLACE WHERE flows voor standalone streamingtabellen.

Aanvullende bronnen