Optimale Aktualisierung für materialisierte Seeblicke in einem Seehaus

Jedes Mal, wenn eine geplante Aktualisierung für Ihre materialisierten Seeansichten ausgeführt wird, bestimmt Fabric basierend auf den Änderungen in den Quelldaten die beste Strategie– keine Aktualisierung, inkrementell oder vollständig. Dieses Verhalten wird als optimale Aktualisierung bezeichnet, und es hilft Ihnen, Ihre materialisierten Seeansichten auf dem neuesten Stand zu halten, während Die Berechnungskosten und Die Aktualisierungszeit minimiert werden.

In diesem Artikel wird erläutert, wie eine optimale Aktualisierung funktioniert, was jede Strategie tut und wie Sie bei Bedarf in den vollständigen Aktualisierungsmodus wechseln.

Hinweis

Die optimale Aktualisierung wird in den folgenden Szenarien nicht unterstützt:

  • PySpark-Definitionen: Optimale Aktualisierung gilt nur für MLVs, die mit Spark SQL definiert sind. PySpark-definierte MLVs verwenden immer die vollständige Aktualisierung.
  • Nicht-Delta-Quelltabellen: Materialisierte Seeansichten, die Nicht-Delta-Tabellen als Quelle verwenden, führen immer eine vollständige Aktualisierung durch. Inkrementelle und keine Aktualisierungsstrategien erfordern Delta-Tabellenquellen.

Vorteile einer optimalen Aktualisierung

Durch die Analyse von Delta-Commits in Quelltabellen kann eine optimale Aktualisierung intelligente Entscheidungen darüber treffen, wie Ihre Daten verarbeitet werden. Wenn möglich, kann dies zu folgendem Ergebnis führen:

  • Niedrigere Kosten: Weniger Rechen- und Speicheraufwand werden verwendet, wenn Fabric erkennt, dass sich die Quelldaten nicht geändert haben, und die Aktualisierung wird vollständig übersprungen. Es gelten keine zusätzlichen Gebühren für eine optimale Aktualisierung– Sie werden basierend auf der Berechnungsnutzung während aktualisierungsvorgängen in Rechnung gestellt.
  • Verbesserte Effizienz: Schnellere Aktualisierungszyklen, wenn nur geänderte Daten verarbeitet werden müssen, sodass Sie neuere Erkenntnisse liefern können.
  • Zeitersparnis: Reduzierte Aktualisierungsdauer beim Anwenden der inkrementellen Verarbeitung, anstatt das vollständige Dataset neu zu komplizieren.

Optimale Aktualisierungsstrategien

In der folgenden Tabelle werden die Aktualisierungsstrategien beschrieben, die von einer optimalen Aktualisierungsmethode ausgewählt werden können:

Aktualisierungsrichtlinie Description
Keine Aktualisierung Wenn in den Quelltabellen keine neuen Delta-Commits erkannt werden, überspringt Fabric die Aktualisierung vollständig, um unnötige Berechnungen zu vermeiden.
Schrittweise Aktualisierung Verarbeitet nur die geänderten Daten, wenn neue Delta-Commits in den Quelltabellen erkannt werden.
Vollständige Aktualisierung Komppiliert die gesamte materialisierte Seeansicht aus dem vollständigen Quelldatensatz. Diese Strategie wird verwendet, wenn nicht unterstützte Ausdrücke erkannt werden, wenn Änderungen nicht inkrementell verarbeitet werden können oder wenn das Quelldatenset klein genug ist, dass eine vollständige Neukompilierung schneller ist als die inkrementelle Verarbeitung.

Von Bedeutung

Die inkrementelle Aktualisierung wird auf Grundlage der folgenden Faktoren angewendet:

  • Quelldatenmuster. Append-only-Daten unterstützen die inkrementelle Verarbeitung von Einfügungen. Für nicht-angehängte Daten, wie Löschungen oder Aktualisierungen, wird inkrementelle Aktualisierung nur unterstützt, wenn die materialisierte Seeansicht einen Aktualisierungshinweis verwendet, der die Zeilenidentität identifiziert. Ansonsten fällt die Engine wieder auf volle Aktualisierung zurück. Weitere Informationen finden Sie unter Inkrementelle Aktualisierung und Datenänderungsmuster.
  • Delta-Änderungsdatenfeed (CDF). CDF muss auf allen Quelltabellen aktiviert sein (delta.enableChangeDataFeed=true), auf die in der materialisierten Lake-View-Definition verwiesen wird. Ohne CDF kann eine optimale Aktualisierung nur zwischen keiner Aktualisierung und vollständiger Aktualisierung wählen. Weitere Informationen finden Sie unter "Inkrementelle Aktualisierung aktivieren".

Optimale Aktualisierung einrichten

Der optimale Aktualisierungsumschalter bietet Ihnen Strategien zur Vermeidung der Aktualisierung sowie zur vollständigen Aktualisierung, ohne dass zusätzliche Konfiguration erforderlich ist. Um die inkrementelle Aktualisierungsstrategie zu entsperren, müssen Sie auch den Änderungsdatenfeed in Ihren Quelltabellen aktivieren.

Aktivieren des optimalen Aktualisierungsmodus

Standardmäßig ist der optimale Aktualisierungsmodus für eine materialisierte Seeansichtslinie aktiviert. Wenn sie nicht aktiviert ist, führen Sie die folgenden Schritte aus, um sie zu aktivieren:

  1. Gehen Sie zu Ihrem Seehaus und wählen Sie den Materialisierten Seeblick aus.

  2. Wählen Sie "Verwalten" und dann den Umschalter " Optimale Aktualisierung" aus, um ihn zu aktivieren.

    Screenshot, der die Umschaltfläche zeigt, um den optimalen Aktualisierungsmodus zu aktivieren.

Inkrementelle Aktualisierungs- und Datenänderungsmuster

Die inkrementelle Aktualisierung unterstützt sowohl reine Anfügedatenmuster als auch Datenmuster, die nicht nur auf dem Anhängen von Daten basieren, sofern die Abfrage und die Daten mit der Aktualisierungsstrategie kompatibel sind.

Hinweis

Wenn inkrementelle Aktualisierung nicht die effizienteste Option ist, kann die Engine je nach Größe und Kosten der Änderungen auf eine vollständige Aktualisierung zurückgreifen. Dieser Ausweichmechanismus trägt dazu bei, effiziente Aktualisierungen aufrechtzuerhalten und gleichzeitig die Korrektheit zu wahren.

Bei Aktualisierungen, bei denen nur angehängt wird, verarbeitet Fabric nur die neuen Zeilen, die seit der vorherigen Aktualisierung hinzugefügt wurden. Für nicht-angehängte Daten, wie Löschungen oder Updates, benötigt die Engine eine zuverlässige Methode, um Zeilen zu identifizieren. Wenn die materialisierte Seeansicht einen Aktualisierungshinweis definiert, der einen eindeutigen Schlüssel deklariert, kann Fabric die Deltas schrittweise anwenden. Wenn kein kompatibler Schlüssel verfügbar ist, greift die Engine auf volle Aktualisierung zurück – selbst wenn CDF aktiviert ist und die Abfrage nur unterstützte SQL-Konstrukte verwendet.

Für weitere Informationen zum Umgang mit Löschungen und Aktualisierungen siehe Verwalten von Löschungen und Aktualisierungen in materialisierten Seeansichten mit Aktualisierungshinweisen.

Inkrementelle Aktualisierung aktivieren

Um die inkrementelle Aktualisierung zu verwenden, müssen Sie die Eigenschaft "Delta change data feed" (CDF) für alle Quelltabellen oder materialisierten Seeansichten aktivieren, auf die in der materialisierten Seeansichtsdefinition verwiesen wird. Mit CDF kann Fabric nur die Zeilen lesen, die seit der letzten Aktualisierung geändert wurden, anstatt das vollständige Dataset neu zu verarbeiten.

Ohne AKTIVIERTes CDF kann eine optimale Aktualisierung nur zwischen keiner Aktualisierung und vollständiger Aktualisierung wählen.

Tipp

Damit Sie Möglichkeiten zur Optimierung der Aktualisierung erkennen können, zeigt Fabric ein Banner an, das materialisierte Lake-Ansichten auflistet, die für die inkrementelle Aktualisierung geeignet sind, aber blockiert sind, weil CDF für eine oder mehrere Quelltabellen nicht aktiviert ist. Das Banner wird in der Lineage-Ansicht, in den Details zu den letzten Ausführungen und auf der Ebene einzelner Knoten angezeigt, sodass Sie die Lücke unabhängig davon erkennen können, welchen Einstiegspunkt Sie verwenden.

Screenshot des Banners

So aktivieren Sie CDF direkt über das Banner:

  1. Wählen Sie im Banner "CDF aktivieren" aus.

  2. Überprüfen Sie im Dialogfeld "Change Data Feed aktivieren" die Liste der materialisierten Lake-Views und der Quelltabellen, für die CDF aktiviert wird.

    Screenshot des Dialogfelds „Change Data Feed aktivieren“ mit einer Auflistung materialisierter Lake-Views und der Quelltabellen, in denen CDF aktiviert wird.

  3. Wählen Sie Aktivieren aus. Die nächste Aktualisierung spiegelt den aktualisierten CDF-Status wider.

Hinweis

Das Aktivieren von CDF für Ihre Quelltabellen hat keine messbaren Auswirkungen auf den Speicherplatzbedarf oder die Leistung der Quelltabellen, die für materialisierte Lake-Views verwendet werden. CDF ist eine standardmäßige Delta Lake-Tabelleneigenschaft, von der auch andere Fabric-Features profitieren können. Weitere Informationen zur Funktionsweise des CDF finden Sie unter Verwenden des Delta Lake-Änderungsdatenfeeds.

Sie können CDF bei der Erstellung aktivieren, indem Sie TBLPROPERTIES in der CREATE Anweisung einschließen.

CREATE OR REPLACE MATERIALIZED LAKE VIEW silver.cleaned_order_data
TBLPROPERTIES (delta.enableChangeDataFeed=true)
AS
SELECT 
    o.order_id,
    o.order_date,
    o.product_id,
    p.product_name,
    o.quantity,
    p.price,
    o.quantity * p.price AS revenue
FROM bronze.orders o
INNER JOIN bronze.products p
ON o.product_id = p.product_id

Verwenden Sie ALTER TABLE für vorhandene Quelltabellen, um CDF zu aktivieren:

ALTER TABLE <table-name> SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

So aktivieren Sie z. B. CDF in beiden Quelltabellen aus dem Leitfaden für die ersten Schritte:

ALTER TABLE bronze.products SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
ALTER TABLE bronze.orders SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

SQL-Konstrukte, die von der inkrementellen Aktualisierung unterstützt werden

Die inkrementelle Aktualisierung funktioniert, wenn Ihre materialisierte Lake-View-Definition nur die hier beschriebenen SQL-Konstrukte verwendet. Wenn Ihre Abfrage nicht unterstützte Konstrukte enthält, z. B. Fensterfunktionen oder nicht deterministische Funktionen, aktualisiert Fabric weiterhin Ihre Daten, greift jedoch auf eine vollständige Aktualisierung zurück.

SQL-Konstrukt Bemerkung
SELECT Ausdruck Deterministische integrierte Funktionen und Ausdrücke werden unterstützt. Nicht deterministische Funktionen wie rand(), uuid()und current_timestamp() werden nicht unterstützt. DISTINCT und Fensterfunktionen werden nicht unterstützt.
FROM Unterstützt Delta-Tabellen und materialisierte Seeansichten. Unterabfragen und CTEs funktionieren, wenn sie nur die unterstützten Klauseln verwenden.
WHERE Nur deterministische integrierte Funktionen werden unterstützt.
INNERE VERKNÜPFUNG Unterstützt.
LEFT OUTER JOIN /LEFT SEMI JOIN Unterstützt. Die inkrementelle Aktualisierung funktioniert nur, wenn die rechte Seite der Tabelle während des Aktualisierungszyklus unverändert bleibt. Jede Änderung an der rechten Tabelle löst eine vollständige Aktualisierung aus.
Gruppieren nach / Aggregate Unterstützt. Die Verwendung von Aggregaten (AVG(), STDDEV(), und andere) erfordert, dass jede Quelltabelle partitioniert ist und die Spaltenspalte in die GROUP BY Klausel der MLV-Abfrage aufgenommen wird – diese Anforderung erlaubt es Fabric, nur die betroffenen Partitionen schrittweise neu zu berechnen.
SUM(), MIN(), , MAX()und COUNT() (ohne DISTINKT) sind ein Spezialfall: Sie unterstützen inkrementelle Aktualisierungen ohne die Partitionierungsanforderung.
Das Mischen anderer Aggregatfunktionen mit SUM(), COUNT(), , MIN()und MAX() in derselben Abfrage (zum Beispiel SELECT SUM(amount), AVG(price) ...) erfordert die Partitionierungsbedingung für die gesamte Abfrage; andernfalls fällt Fabric auf eine vollständige Aktualisierung zurück. GROUP BY Spalten müssen in der SELECT-Liste erscheinen.
UNION ALL Unterstützt.
WITH Allgemeine Tabellenausdrücke (CTEs), wenn sie nur unterstützte Klauseln verwenden.
Unterabfragen in Ausdrücken Unterabfragen innerhalb von SELECT- oder WHERE-Ausdrücken (z. B. skalare Unterabfragen oder EXISTS) lösen eine vollständige Aktualisierung aus, wenn änderungen an einer referenzierten Tabelle vorhanden sind.
Einschränkung der Datenqualität Nur deterministische integrierte Funktionen werden in Einschränkungen unterstützt.

Hinweis

Die Verwendung nicht unterstützter Konstrukte verhindert nicht, dass Sie einen materialisierten Seeblick erstellen. Dies bedeutet nur, dass Fabric eine vollständige Aktualisierung anstelle einer inkrementellen Aktualisierung verwendet.

Vollständige Aktualisierung

Optimale Aktualisierung fällt bei Bedarf automatisch auf die vollständige Aktualisierung zurück, sodass Sie sie normalerweise nicht erzwingen müssen. Es gibt jedoch Fälle, in denen Sie eine vollständige Aktualisierung manuell auslösen möchten, z. B. um unerwartete Ergebnisse zu beheben oder Daten nach einer Korrektur erneut zu verarbeiten.

Ausführen einer einmaligen vollständigen Aktualisierung mit SQL

Führen Sie den folgenden Befehl aus, um eine vollständige Aktualisierung einer bestimmten materialisierten Seeansicht zu erzwingen:

REFRESH MATERIALIZED LAKE VIEW [workspace.lakehouse.schema].MLV_Identifier FULL

Hinweis

Wenn der Arbeitsbereichsname Leerzeichen enthält, schließen Sie ihn in Backticks ein: `My Workspace`.lakehouse.schema.view_name

Optimale Aktualisierung deaktivieren

Wenn jede geplante Ausführung eine vollständige Aktualisierung durchführen soll, können Sie den optimalen Aktualisierungsschalter deaktivieren. Dadurch werden sowohl die Nichtaktualisierungs- als auch die inkrementellen Strategien deaktiviert– jede Ausführung komppiliert das vollständige Dataset, auch wenn keine Quelldaten geändert wurden.

  1. Gehen Sie zu Ihrem Seehaus und wählen Sie den Materialisierten Seeblick aus.

  2. Wähle "Verwalten " und schalte den Umschalter "Optimale Aktualisierung " aus.

    Screenshot, der die Umschaltfläche zeigt, um in den vollständigen Aktualisierungsmodus zu wechseln.