Teilen über


Materialisierte Ansichten

Wie Standardansichten sind materialisierte Ansichten die Ergebnisse einer Abfrage, und Sie greifen auf sie auf die gleiche Weise wie eine Tabelle zu. Im Gegensatz zu Standardansichten, die Ergebnisse für jede Abfrage neu berechnen, werden die Ergebnisse in materialisierten Ansichten zwischengespeichert und in einem bestimmten Intervall aktualisiert. Da eine materialisierte Ansicht vorkompiliert ist, können Abfragen dafür wesentlich schneller ausgeführt werden als für normale Ansichten.

Eine materialisierte Sicht ist ein deklaratives Pipelineobjekt. Es enthält eine Abfrage , die sie definiert, einen Fluss zum Aktualisieren und die zwischengespeicherten Ergebnisse für schnellen Zugriff. Eine materialisierte Ansicht:

  • Verfolgt Änderungen in upstream-Daten nach.
  • Beim Auslösen verarbeitet die geänderten Daten inkrementell und wendet die erforderlichen Transformationen an.
  • Verwaltet die Ausgabetabelle, die mit den Quelldaten synchronisiert wird, basierend auf einem angegebenen Aktualisierungsintervall.

Materialisierte Ansichten sind eine gute Wahl für viele Transformationen:

  • Sie nutzen Überlegungen über zwischengespeicherte Ergebnisse anstelle von Zeilen. Tatsächlich schreiben Sie einfach eine Abfrage.
  • Sie sind immer richtig. Alle erforderlichen Daten werden verarbeitet, auch wenn sie verspätet oder in falscher Reihenfolge eintreffen.
  • Sie sind häufig inkrementell. Databricks versucht, die geeignete Strategie auszuwählen, die die Kosten für die Aktualisierung einer materialisierten Ansicht minimiert.

Funktionsweise von materialisierten Ansichten

Das folgende Diagramm veranschaulicht, wie materialisierte Ansichten funktionieren.

Diagramm, das zeigt, wie materialisierte Ansichten funktionieren

Materialisierte Ansichten werden durch eine einzelne Pipeline definiert und aktualisiert. Sie können materialisierte Ansichten explizit im Quellcode der Pipeline definieren. Tabellen, die von einer Pipeline definiert sind, können von keiner anderen Pipeline geändert oder aktualisiert werden.

Hinweis

Wenn Sie eine materialisierte Ansicht außerhalb einer Pipeline erstellen, erstellt Azure Databricks mithilfe von Databricks SQL eine Pipeline, die zum Aktualisieren der Ansicht verwendet wird. Sie können die Pipeline anzeigen, indem Sie Aufträge und Pipelines aus dem linken Navigationsbereich in Ihrem Arbeitsbereich auswählen. Sie können der Ansicht die Spalte " Pipelinetyp" hinzufügen. Materialisierte Ansichten, die in einer Pipeline definiert sind, haben einen Typ von ETL. Materialisierte Ansichten, die in Databricks SQL erstellt wurden, weisen einen Typ von MV/ST auf.

Databricks verwendet Unity-Katalog zum Speichern von Metadaten zur Ansicht, einschließlich der Abfrage und zusätzlicher Systemansichten, die für inkrementelle Updates verwendet werden. Die zwischengespeicherten Daten werden im Cloudspeicher materialisiert.

Im folgenden Beispiel werden zwei Tabellen miteinander verknüpft und das Ergebnis wird mithilfe einer materialisierten Ansicht aktuell gehalten.

Python

from pyspark import pipelines as dp

@dp.materialized_view
def regional_sales():
  partners_df = spark.read.table("partners")
  sales_df = spark.read.table("sales")

  return (
    partners_df.join(sales_df, on="partner_id", how="inner")
  )

SQL

CREATE OR REPLACE MATERIALIZED VIEW regional_sales
  AS SELECT *
  FROM partners
    INNER JOIN sales ON
      partners.partner_id = sales.partner_id;

Automatische schrittweise Updates

Wenn die Pipeline, die eine materialisierte Ansicht definiert, ausgelöst wird, wird die Ansicht automatisch auf dem neuesten Stand gehalten, häufig inkrementell. Databricks versucht, nur die Daten zu verarbeiten, die verarbeitet werden müssen, um die materialisierte Ansicht auf dem neuesten Stand zu halten. Eine materialisierte Ansicht zeigt immer das richtige Ergebnis an, auch wenn das Abfrageergebnis vollständig neu komputiert werden muss, aber häufig führt Databricks nur inkrementelle Aktualisierungen an einer materialisierten Ansicht durch, was viel weniger kostspielig sein kann als eine vollständige Neukompilierung.

Das folgende Diagramm zeigt eine materialisierte Ansicht namens sales_report, die das Ergebnis der Verknüpfung von zwei vorhergehenden Tabellen, clean_customers und clean_transactions, ist und nach Ländern gruppiert wurde. Ein Upstreamprozess fügt 200 Zeilen in clean_customers in drei Länder (USA, Niederlande, Großbritannien) ein und aktualisiert 5.000 Zeilen in clean_transactions entsprechend diesen neuen Kunden. Die sales_report materialisierte Ansicht wird nur für die Länder, in denen neue Kunden oder entsprechende Transaktionen vorhanden sind, inkrementell aktualisiert. In diesem Beispiel werden drei Zeilen anstelle des gesamten Umsatzberichts aktualisiert.

Beispiel für inkrementelle Aktualisierung der materialisierten Ansicht

Weitere Informationen dazu, wie die inkrementelle Aktualisierung in materialisierten Ansichten funktioniert, finden Sie unter Inkrementelle Aktualisierung für materialisierte Ansichten.

Einschränkungen materialisierter Sichten

Materialisierte Ansichten haben die folgenden Einschränkungen:

  • Da Aktualisierungen korrekte Abfragen erstellen, erfordern einige Änderungen an Eingaben eine vollständige Neukompilierung einer materialisierten Ansicht, was teuer sein kann.
  • Sie sind nicht für Anwendungsfälle mit geringer Latenz ausgelegt. Die Latenz der Aktualisierung einer materialisierten Ansicht liegt in den Sekunden oder Minuten, nicht in Millisekunden.
  • Nicht alle Berechnungen können inkrementell berechnet werden.