Inkrementelle Aktualisierung für materialisierte Ansichten
In diesem Artikel werden die Semantik und Anforderungen für inkrementelle Aktualisierungen in materialisierten Ansichten beschrieben und die SQL-Vorgänge, Schlüsselwörter und Klauseln identifiziert, die die inkrementelle Aktualisierung unterstützen. Sie enthält die Unterschiede zwischen inkrementellen und vollständigen Aktualisierungen und enthält Empfehlungen für die Auswahl zwischen materialisierten Ansichten und Streamingtabellen.
Wenn Updates für materialisierte Ansichten mithilfe von serverlosen Pipelines ausgeführt werden, können viele Abfragen inkrementell aktualisiert werden. Inkrementelle Aktualisierungen sparen Rechenkosten, indem Änderungen in den Datenquellen erkannt werden, mit deren Verwendung die materialisierte Ansicht definiert und das Ergebnis inkrementell berechnet wird.
Serverlose Pipelines sind für die inkrementelle Aktualisierung erforderlich.
Für die inkrementelle Aktualisierung für materialisierte Ansichten sind serverlose Pipelines erforderlich.
Aktualisierungsvorgänge für materialisierte Ansichten, die in Databricks SQL definiert sind, werden immer mit serverlosen Pipelines ausgeführt.
Für materialisierte Ansichten, die mithilfe von Delta Live Tables-Pipelines definiert sind, müssen Sie die Pipeline so konfigurieren, dass sie serverlos verwendet wird. Siehe Konfigurieren einer serverlosen Delta Live Tables-Pipeline.
Was sind die Aktualisierungssemantik für materialisierte Ansichten?
Materialisierte Ansichten garantieren gleichwertige Ergebnisse für Batchabfragen. Betrachten Sie beispielsweise die folgende Aggregatabfrage:
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Wenn Sie diese Abfrage mit einem beliebigen Azure Databricks-Produkt ausführen, wird das Ergebnis mithilfe der Batchsemantik berechnet, um alle Datensätze in der Quelle transactions_table
zu aggregieren, was bedeutet, dass alle Quelldaten in einem Vorgang gescannt und aggregiert werden.
Hinweis
Einige Azure Databricks-Produkte speichern Ergebnisse automatisch innerhalb oder über Sitzungen hinweg zwischen, wenn sich Datenquellen nach der letzten Ausführung der Abfrage nicht geändert haben. Das verhalten der automatischen Zwischenspeicherung unterscheidet sich von materialisierten Ansichten.
Im folgenden Beispiel wird diese Batchabfrage in eine materialisierte Ansicht umgewandelt:
CREATE OR REFRESH MATERIALIZED VIEW transation_summary AS
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Wenn Sie eine materialisierte Ansicht aktualisieren, ist das berechnete Ergebnis identisch mit der Batchabfragesemantik. Diese Abfrage ist ein Beispiel für eine materialisierte Ansicht, die inkrementell aktualisiert werden kann, was bedeutet, dass der Aktualisierungsvorgang versucht, nur neue oder geänderte Daten in der Quelle transactions_table
zu verarbeiten, um die Ergebnisse zu berechnen.
Überlegungen zur Datenquelle für materialisierte Ansichten
Sie können zwar eine materialisierte Ansicht für jede Datenquelle definieren, aber nicht alle Datenquellen eignen sich gut für materialisierte Ansichten. Berücksichtigen Sie die folgenden Vorbehalte und Empfehlungen:
Wichtig
Materialisierte Ansichten versuchen, Ergebnisse für unterstützte Vorgänge inkrementell zu aktualisieren. Einige Änderungen in Datenquellen erfordern eine vollständige Aktualisierung.
Alle Datenquellen für materialisierte Ansichten sollten robust für die vollständige Aktualisierungssemantik sein, auch wenn die Abfrage, die die materialisierte Ansicht definiert, die inkrementelle Aktualisierung unterstützt.
- Bei Abfragen, bei denen eine vollständige Aktualisierung kostenaufwendig wäre, verwenden Sie Streamingtabellen, um genau einmal die Verarbeitung zu gewährleisten. Beispiele sind sehr große Tabellen.
- Definieren Sie keine materialisierte Ansicht für eine Datenquelle, wenn Datensätze nur einmal verarbeitet werden sollen. Verwenden Sie stattdessen Streamingtabellen. Beispiele hierfür sind:
- Datenquellen, die den Datenverlauf nicht aufbewahren, z. B. Kafka.
- Erfassungsvorgänge, z. B. Abfragen, die das automatische Laden verwenden, um Daten aus dem Cloudobjektspeicher aufzunehmen.
- Jede Datenquelle, in der Sie nach der Verarbeitung Daten löschen oder archivieren möchten, aber Informationen in nachgelagerten Tabellen aufbewahren müssen. Beispielsweise eine datumspartitionierte Tabelle, in der Sie Datensätze löschen möchten, die älter als ein bestimmter Schwellenwert sind.
- Nicht alle Datenquellen unterstützen inkrementelle Aktualisierungen. Die folgenden Datenquellen unterstützen die inkrementelle Aktualisierung:
- Delta-Tabellen, einschließlich verwalteter Tabellen im Unity-Katalog und externe Tabellen, die von Delta Lake unterstützt werden.
- Materialisierte Sichten.
- Streamingtabellen, einschließlich der Ziele von Vorgängen
APPLY CHANGES INTO
.
- Bei einigen inkrementellen Aktualisierungsvorgängen muss die Zeilennachverfolgung für die abgefragten Datenquellen aktiviert werden. Die Zeilennachverfolgung ist ein Delta Lake-Feature, das nur von Delta-Tabellen unterstützt wird, die materialisierte Ansichten, Streamingtabellen und verwaltete Tabellen im Unity-Katalog enthalten. Weitere Informationen finden Sie unter Verwenden der Zeilenverfolgung für Delta-Tabellen.
Optimieren materialisierter Ansichten
Um die beste Leistung zu erzielen, empfiehlt Databricks, die folgenden Features für alle materialisierten Ansichtsquelltabellen zu aktivieren:
Aktualisierungstypen für materialisierte Ansichten
Aktualisierungen in materialisierten Ansichten sind entweder vollständig oder inkrementell. Bei allen Vorgängen sind die Ergebnisse einer inkrementellen Aktualisierung und der vollständigen Aktualisierung identisch. Azure Databricks führt eine Kostenanalyse aus, um festzustellen, ob Änderungen an Datenquellen eine vollständige Aktualisierung erfordern.
Informationen zum Ermitteln des verwendeten Aktualisierungstyps finden Sie unter Ermitteln des Aktualisierungstyps eines Updates.
Vollständige Aktualisierung
Eine vollständige Aktualisierung überschreibt die Ergebnisse in der materialisierten Ansicht, indem alle in der Quelle verfügbaren Daten verarbeitet werden. Je nachdem, wie sich die Datenquellen geändert haben, werden möglicherweise alle materialisierten Ansichten vollständig aktualisiert.
Sie können optional eine vollständige Aktualisierung erzwingen. Verwenden Sie für materialisierte Ansichten, die mit Databricks SQL definiert sind, die folgende Syntax:
REFRESH MATERIALIZED VIEW mv_name FULL
Für materialisierte Ansichten, die in einer Delta Live Tables-Pipeline definiert sind, können Sie eine vollständige Aktualisierung ausgewählter Datasets oder aller Datasets in einer Pipeline ausführen. Erfahren Sie , wie Delta Live Tables Tabellen und Ansichten aktualisiert.
Wichtig
Wenn eine vollständige Aktualisierung für eine Datenquelle ausgeführt wird, in der Datensätze aufgrund des Schwellenwerts für die Datenaufbewahrung oder des manuellen Löschens entfernt wurden, werden entfernte Datensätze nicht in berechneten Ergebnissen widerzuspiegeln. Möglicherweise können Sie alte Daten nicht wiederherstellen, wenn die Daten in der Quelle nicht mehr verfügbar sind.
Hinweis
Sie können optional vollständige Aktualisierungen für eine Tabelle deaktivieren, indem Sie die Tabelleneigenschaft pipelines.reset.allowed
auf false
festlegen.
Inkrementelle Aktualisierung
Eine inkrementelle Aktualisierung verarbeitet Änderungen an den zugrunde liegenden Daten nach der letzten Aktualisierung und fügt diese Daten dann an die Tabelle an. Abhängig von den Basistabellen und eingeschlossenen Vorgängen können nur bestimmte Arten von materialisierten Sichten inkrementell aktualisiert werden.
Nur materialisierte Ansichten, die mit serverlosen Pipelines aktualisiert werden, können die inkrementelle Aktualisierung verwenden. Materialisierte Ansichten, die keine serverlosen Pipelines verwenden, werden immer vollständig aktualisiert.
Wenn materialisierte Ansichten mithilfe eines SQL-Warehouse oder einer serverlosen Delta Live Tables-Pipeline erstellt werden, werden sie automatisch inkrementell aktualisiert, wenn ihre Abfragen unterstützt werden. Wenn eine Abfrage nicht unterstützte Ausdrücke für eine inkrementelle Aktualisierung enthält, wird eine vollständige Aktualisierung ausgeführt, was zu zusätzlichen Kosten führt.
Unterstützung für die inkrementelle Aktualisierung der materialisierten Ansicht
In der folgenden Tabelle ist die Unterstützung für die inkrementelle Aktualisierung nach SQL-Keyword oder -Klausel aufgeführt:
Wichtig
Einige Schlüsselwörter und Klauseln erfordern die Aktivierung der Zeilennachverfolgung für die abgefragten Datenquellen. Weitere Informationen finden Sie unter Verwenden der Zeilenverfolgung für Delta-Tabellen.
Diese Schlüsselwörter und Klauseln werden in der folgenden Tabelle mit einem Stern (*) gekennzeichnet.
SQL-Schlüsselwort oder -Klausel | Unterstützung für die inkrementelle Aktualisierung |
---|---|
SELECT -Ausdrücke* |
Ja, Ausdrücke, einschließlich deterministischer integrierter Funktionen und unveränderlicher benutzerdefinierter Funktionen (UDFs) werden unterstützt. |
GROUP BY |
Ja |
WITH |
Ja, allgemeine Tabellenausdrücke werden unterstützt. |
UNION ALL * |
Ja |
FROM |
Unterstützte Basistabellen beinhalten Delta-Tabellen, materialisierte Sichten und Streamingtabellen. |
WHERE , HAVING * |
Filterklauseln wie WHERE und HAVING werden unterstützt. |
INNER JOIN * |
Ja |
LEFT OUTER JOIN * |
Ja |
FULL OUTER JOIN * |
Ja |
RIGHT OUTER JOIN * |
Ja |
OVER |
Ja. PARTITION_BY -Spalten müssen für die Inkrementierung in Fensterfunktionen angegeben werden. |
QUALIFY |
Ja |
EXPECTATIONS |
Nein Materialisierte Sichten, die Erwartungen verwenden, werden immer vollständig aktualisiert. |
Hinweis
Nicht deterministische Funktionen, z. B. CURRENT_TIMESTAMP
werden nicht unterstützt.
Ermitteln des Aktualisierungstyps eines Updates
Um die Leistung von Aktualisierungen materialisierter Sichten zu optimieren, verwendet Azure Databricks ein Kostenmodell zur Auswahl des für die Aktualisierung verwendeten Verfahrens. Die folgende Tabelle beschreibt diese Verfahren:
Verfahren | Inkrementelle Aktualisierung? | Beschreibung |
---|---|---|
FULL_RECOMPUTE |
Nein | Die materialisierte Ansicht wurde vollständig neu berechnet. |
NO_OP |
Nicht zutreffend | Die materialisierte Sicht wurde nicht aktualisiert, da keine Änderungen an der Basistabelle festgestellt wurden. |
ROW_BASED oder PARTITION_OVERWRITE |
Ja | Die materialisierte Sicht wurde über das angegebene Verfahren inkrementell aktualisiert. |
Um die verwendete Technik zu ermitteln, fragen Sie das Ereignisprotokoll von Delta Live Tables ab, wobei event_type
für planning_information
steht:
SELECT
timestamp,
message
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = 'planning_information'
ORDER BY
timestamp desc;
Ersetzen Sie <fully-qualified-table-name>
durch den vollständig qualifizierten Namen der materialisierten Ansicht, einschließlich des Katalogs und des Schemas.
Weitere Informationen finden Sie unter Was ist das Delta Live Tables-Ereignisprotokoll?.