Wann sollte man REPLACE WHERE vs. materialisierte Ansichten verwenden

Sowohl REPLACE WHERE Flows als auch eigenständige materialisierte Views ermöglichen es, abgeleitete Tabellen zu pflegen, die bei Änderungen der Quelldaten aktuell bleiben, aber sie lösen unterschiedliche Probleme. Für die meisten Batch-Extract-, Transform- und Load-Workloads (ETL), die periodisch ein Zeitfenster oder eine Partition überschreiben, verwenden Sie einen inkrementellen REPLACE WHERE-Flow. Verwenden Sie materialisierte Ansichten für eine Abfragebeschleunigungsschicht, die vorab berechnete Ergebnisse an Dashboards und Berichte liefert.

Diese Seite behandelt eigenständige Streaming-Tabellen und materialisierte Ansichten. Für REPLACE WHERE Flows in einer Lakeflow-Pipeline siehe Batch-Verarbeitung mit REPLACE WHERE Flows.

Verwenden Sie REPLACE WHERE für Batch-Überschreibungen

Ein REPLACE WHERE Flow berechnet und überschreibt nur die Zeilen, die einem Prädikat entsprechen, wie zum Beispiel ein Zeitfenster oder eine Partition. Alle anderen Reihen bleiben unberührt. Da der Flow die Quellanfrage nur für diesen Prädikatbereich neu bewertet, hängen die Kosten jeder Aktualisierung von der Größe des Bereichs ab, nicht von der Größe der Tabelle.

Eine materialisierte Ansicht behält das vollständige Ergebnis ihrer definierenden Abfrage bei. Azure Databricks aktualisiert eine materialisierte Ansicht schrittweise, wenn Abfrage- und Quelldaten dies unterstützen, und führt ansonsten eine vollständige Aktualisierung durch. Ob eine Aktualisierung inkrementell ist, hängt von der Abfragestruktur und den Quelltabellen ab, sodass die Kosten jeder Aktualisierung schwerer vorherzusagen sind. Erfahren Sie , wie eigenständige materialisierte Ansichten aktualisiert werden?.

Für ein Batch-ETL-Datenmodell, das sich in begrenzten Bereichen ändert, ermöglicht ein REPLACE WHERE Flow genau zu steuern, welche Zeilen jede Aktualisierung neu schreibt. Eine materialisierte Sicht passt besser, wenn Leser schnellen Zugriff auf ein vorab berechnetes Ergebnis benötigen.

Konstrukte Medaillonschichten zuordnen

Die folgende Tabelle ordnet jede Ebene einer Medaillonarchitektur dem von Databricks empfohlenen Konstrukt zu:

Ebene Bauen Warum?
Bronze (Rohdatenaufnahme) Datenaufnahme mit Lakeflow Connect oder Auto Loader Lädt Rohdatensätze schrittweise, sobald sie eintreffen, ohne historische Daten neu zu verarbeiten.
Silber (Fakten) Inkrementeller ERSETZEN-Ablauf WHERE Überschreibt nur die betroffenen Zeitfenster oder Partitionen für Aktualisierungen von Faktendaten, verspätet eintreffende Daten und Korrekturen.
Silber (Dimensionen) AUTO CDC Ablauf Wendet Einfüge-, Aktualisierungs- und Löschsemantik automatisch an und bewahrt den Verlauf bei Slowly Changing Dimensions (SCD) Typ 1 oder Typ 2.
Gold (Aggregationen und Datenmodelle) Inkrementeller ERSETZEN-Ablauf WHERE Berechnet nur den Prädikatenbereich für Aggregate und Modelle neu und vermeidet vollständige Tabellen-Neuberechnungen.
Abfragebeschleunigung und Bereitstellung Materialisierte Sicht Liefert vorab berechnete Ergebnisse an Dashboards und Berichte und hält die Abfrageergebnisse aktuell.

Leitfaden zur Entscheidungsfindung

Verwenden Sie den folgenden Leitfaden, um zwischen den beiden Optionen zu wählen.

Verwenden Sie einen REPLACE-Fluss WHERE, wenn Sie:

  • Führen Sie periodische Batch-Überschreibungen eines Zeitfensters oder einer Partition durch.
  • Korrigieren Sie verspätet eingehende Daten.
  • Wenden Sie Compliance-Löschungen auf einen begrenzten Bereich an.
  • Aktualisieren Sie die Daten auf Partitionsebene.

Verwenden Sie eine materialisierte Ansicht, wenn Sie:

  • Beschleunige Dashboard-Abfragen.
  • Stellen Sie den Lesern vorberechnete Aggregationen zur Verfügung.
  • Halte die Abfrageergebnisse für eine Serving-Schicht aktuell.

Beispiel: inkrementelles Überschreiben mit REPLACE WHERE

Das folgende Beispiel definiert eine Zieltabelle, die bei jeder Aktualisierung nur die letzten 7 Tage der Daten überschreibt. Während der Aktualisierung löscht der Flow die Zeilen, die dem Prädikat entsprechen, berechnet die Quellabfrage für denselben Bereich neu und fügt die Ergebnisse ein. Die Reihen außerhalb des Fensters bleiben unberührt:

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 ist erforderlich, damit die Spalten nach Namen und nicht nach Position übereinstimmen. Für die vollständige Syntax, Prädikatenüberschreibungen, Backfills und inkrementelles Aktualisierungsverhalten siehe REPLACE WHERE Abläufe für eigenständige Streaming-Tabellen.

Zusätzliche Ressourcen