Share via


Verwenden materialisierter Sichten in Databricks SQL

Wichtig

Dieses Feature befindet sich in der Public Preview.

In diesem Artikel wird beschrieben, wie Sie materialisierte Sichten in Databricks SQL erstellen und diese verwenden, um die Leistung zu verbessern und die Kosten für Ihre Datenverarbeitungs- und Analyseworkloads zu senken.

Was sind materialisierte Sichten?

In Databricks SQL sind materialisierte Sichten von Unity Catalog verwaltete Tabellen, die es Benutzer*innen ermöglichen, Ergebnisse auf Grundlage der neuesten Version von Daten in Quelltabellen vorab zu berechnen. Materialisierte Sichten in Azure Databricks unterscheiden sich von anderen Implementierungen, da die zurückgegebenen Ergebnisse den Zustand der Daten zum Zeitpunkt der letzten Aktualisierung der materialisierten Sicht widerspiegeln, anstatt die Ergebnisse bei jeder Abfrage der materialisierten Sicht zu aktualisieren. Sie können materialisierte Sichten manuell aktualisieren oder Aktualisierungen planen.

Materialisierte Sichten eignen sich besonders gut für Workloads zur Datenverarbeitung, beispielsweise für das Extrahieren, Transformieren und Laden (ETL). Materialisierte Sichten bieten eine einfache, deklarative Möglichkeit für die Datenverarbeitung im Rahmen von Compliance, Korrekturen, Aggregationen oder allgemeinen CDC-Vorgängen (Change Data Capture). Materialisierte Sichten senken die Kosten und verbessern die Abfragelatenz, indem sie langsame Abfragen und häufig verwendete Berechnungen vorab berechnen. Materialisierte Sichten unterstützen zudem benutzerfreundliche Transformationen, indem sie Basistabellen bereinigen, anreichern und denormalisieren. Materialisierte Sichten können die Kosten senken und gleichzeitig die Arbeit der Endbenutzer*innen vereinfachen, da sie in einigen Fällen Änderungen anhand der Basistabellen inkrementell berechnen können.

Materialisierte Sichten wurden erstmals mit der Einführung von Delta Live Tables auf der Databricks Data Intelligence-Plattform unterstützt. Wenn Sie eine materialisierte Sicht in einem Databricks SQL-Warehouse erstellen, wird eine Delta Live Tables-Pipeline erstellt, um Aktualisierungen der materialisierten Sicht zu verarbeiten. Sie können den Status der Aktualisierungsvorgänge über die Delta Live Tables-Benutzeroberfläche, die Delta Live Tables-API oder die Delta Live Tables CLI überwachen. Weitere Informationen finden Sie unter Anzeigen des Status der Aktualisierung einer materialisierten Sicht.

Anforderungen

  • Sie müssen ein Unity Catalog-fähiges Databricks SQL-Warehouse verwenden, um materialisierte Sichten zu erstellen und zu aktualisieren.

  • Ihr Arbeitsbereich muss sich in einer serverlos-fähigen Region befinden.

Informationen zu den Einschränkungen bei der Verwendung materialisierter Sichten mit Databricks SQL finden Sie unter Einschränkungen.

Erstellen einer materialisierten Sicht

Zum Erstellen einer materialisierten Sicht verwenden Sie die Anweisung CREATE MATERIALIZED VIEW. Weitere Informationen finden Sie unter CREATE MATERIALIZED VIEW in der Databricks SQL-Referenz. Verwenden Sie zum Übermitteln einer Erstellungsanweisung den SQL-Editor in der Azure Databricks-Benutzeroberfläche, die Databricks SQL CLI oder die Databricks SQL-API.

Hinweis

Benutzer, die eine materialisierte Sicht erstellen, werden als Besitzer*innen der materialisierten Sicht zugewiesen und müssen über die folgenden Berechtigungen verfügen:

  • SELECT-Berechtigung für die Basistabellen, auf die die materialisierte Sicht verweist.
  • USE CATALOG- und USE SCHEMA-Berechtigungen für den Katalog und das Schema, das die Quelltabellen für die materialisierte Sicht enthält.
  • USE CATALOG- und USE SCHEMA-Berechtigungen für den Zielkatalog und das Schema für die materialisierte Sicht.
  • CREATE TABLE- und CREATE MATERIALIZED VIEW-Berechtigungen für das Schema, das die materialisierte Sicht enthält.

Im folgenden Beispiel wird anhand von Basistabelle base_table1 die materialisierte Sicht mv1 erstellt:

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date, sum(sales) AS sum_of_sales
FROM
  table1
GROUP BY
  date;

Wie werden materialisierte Sichten erstellt?

CREATE-Vorgänge zum Erstellen einer materialisierten Databricks SQL-Sicht verwenden ein Databricks SQL-Warehouse, um Daten in der materialisierten Sicht zu erstellen und zu laden. Da das Erstellen einer materialisierten Sicht ein synchroner Vorgang im Databricks SQL-Warehouse ist, führt der Befehl CREATE MATERIALIZED VIEW zu einer Sperrung, bis die materialisierte Sicht erstellt und der anfängliche Datenladevorgang abgeschlossen ist. Für jede materialisierte Databricks SQL-Sicht wird automatisch eine Delta Live Tables-Pipeline erstellt. Wenn die materialisierte Sicht aktualisiert wird, wird eine Aktualisierung der Delta Live Tables-Pipeline gestartet, um die Aktualisierung zu verarbeiten.

Laden von Daten von externen Speicherorten

Databricks empfiehlt, externe Daten für unterstützte Datenquellen mithilfe von Lakehouse Federation zu laden. Informationen zum Laden von Daten aus Quellen, die von Lakehouse Federation nicht unterstützt werden, finden Sie unter Datenformatoptionen.

Aktualisieren einer materialisierten Sicht

Mit dem REFRESH-Vorgang wird die materialisierte Sicht aktualisiert, um die neuesten Änderungen an der Basistabelle widerzuspiegeln. Zum Erstellen einer materialisierten Sicht verwenden Sie die REFRESH MATERIALIZED VIEW-Anweisung. Weitere Informationen finden Sie in der Databricks SQL-Referenz unter REFRESH (MATERIALIZED VIEW und STREAMING TABLE). Verwenden Sie zum Übermitteln einer Aktualisierungsanweisung den SQL-Editor in der Azure Databricks-Benutzeroberfläche, die Databricks SQL CLI oder die Databricks SQL-API.

Nur Besitzer*innen können die materialisierte Sicht per REFRESH-Anweisung aktualisieren.

Im folgenden Beispiel wird die materialisierte Sicht mv1 aktualisiert:

REFRESH MATERIALIZED VIEW mv1;

Wie werden materialisierte Databricks SQL-Sichten aktualisiert?

Materialisierte Databricks SQL-Sichten verwenden für Aktualisierungsvorgänge Delta Live Tables. Bei einer Aktualisierung der materialisierten Sicht wird eine Aktualisierung der Delta Live Tables-Pipeline gestartet, die die materialisierte Sicht verwaltet, um die Aktualisierung zu verarbeiten.

Da die Aktualisierung durch eine Delta Live Tables-Pipeline verwaltet wird, wird das zum Erstellen der materialisierten Sicht verwendete Databricks SQL-Warehouse nicht verwendet und muss während des Aktualisierungsvorgangs nicht ausgeführt werden.

Einige Abfragen können inkrementell aktualisiert werden. Siehe Aktualisierungsvorgänge für materialisierte Sichten. Wenn keine inkrementelle Aktualisierung möglich ist, wird stattdessen eine vollständige Aktualisierung durchgeführt.

Planen der Aktualisierung materialisierter Sichten

Sie können eine materialisierte Databricks SQL-Sicht so konfigurieren, dass sie nach einem festgelegten Zeitplan automatisch aktualisiert wird. Konfigurieren Sie diesen Zeitplan mit der SCHEDULE-Klausel, wenn Sie die materialisierte Sicht erstellen oder mithilfe der Anweisung ALTER VIEW einen Zeitplan hinzufügen. Beim Erstellen eines Zeitplans wird automatisch ein neuer Databricks-Auftrag konfiguriert, um die Aktualisierung zu verarbeiten. Sie können den Zeitplan jederzeit mit der DESCRIBE EXTENDED-Anweisung anzeigen.

Aktualisieren der Definition einer materialisierten Sicht

Um die Definition einer materialisierten Sicht zu aktualisieren, müssen Sie die materialisierte Sicht zunächst löschen und dann neu erstellen.

Löschen einer materialisierten Sicht

Hinweis

Um den Befehl zum Löschen einer materialisierten Sicht zu übermitteln, müssen Sie als Besitzer*in der materialisierten Sicht zugewiesen sein.

Verwenden Sie die Anweisung DROP VIEW, um eine materialisierte Sicht zu löschen. Zum Übermitteln einer DROP-Anweisung können Sie den SQL-Editor in der Azure Databricks-Benutzeroberfläche, die Databricks SQL CLI oder die Databricks SQL-API verwenden. Im folgenden Beispiel wird die materialisierte Sicht mv1 gelöscht:

DROP MATERIALIZED VIEW mv1;

Beschreiben einer materialisierten Sicht

Um die Spalten und Datentypen für eine materialisierte Sicht abzurufen, verwenden Sie die Anweisung DESCRIBE. Verwenden Sie DESCRIBE EXTENDED, um die Spalten, Datentypen und Metadaten (z. B. Besitzer*in, Standort, Erstellungszeitpunkt und Aktualisierungsstatus) für eine materialisierte Sicht abzurufen. Verwenden Sie zum Übermitteln einer DESCRIBE-Anweisung den SQL-Editor in der Azure Databricks-Benutzeroberfläche, die Databricks SQL CLI oder die Databricks SQL-API.

Anzeigen des Status der Aktualisierung einer materialisierten Sicht

Hinweis

Da die Aktualisierungen materialisierter Sichten von einer Delta Live Tables-Pipeline verwaltet werden, kommt es durch die Startzeit für die Pipeline zu einer Wartezeit. Diese Wartezeit kann im Bereich von Sekunden bis hin zu Minuten liegen, zusätzlich zu der Zeit, die für die Aktualisierung benötigt wird.

Sie können den Status der Aktualisierung einer materialisierten Sicht einsehen, indem Sie die Pipeline anzeigen, die die materialisierte Sicht in der Delta Live Tables-Benutzeroberfläche verwaltet. Alternativ können Sie die Aktualisierungsinformationen anzeigen, die der DESCRIBE EXTENDED-Befehl für die materialisierte Sicht zurückgibt.

Sie können den Aktualisierungsverlauf einer materialisierten Sicht auch einsehen, indem Sie das Ereignisprotokoll von Delta Live Tables abfragen. Weitere Informationen finden Sie unter Anzeigen des Aktualisierungsverlaufs für eine materialisierte Sicht.

Anzeigen des Aktualisierungsstatus in der Delta Live Tables-Benutzeroberfläche

Standardmäßig ist die Delta Live Tables-Pipeline, die eine materialisierte Sicht verwaltet, in der Delta Live Tables-Benutzeroberfläche nicht sichtbar. Um die Pipeline in der Delta Live Tables-Benutzeroberfläche anzuzeigen, müssen Sie direkt auf den Link zur Seite Pipelinedetails der Pipeline zugreifen. So greifen Sie auf den Link zu:

  • Wenn Sie den REFRESH Befehl im SQL-Editor übermitteln, folgen Sie dem Link im Ergebnisbereich.
  • Folgen Sie dem Link, der von der DESCRIBE EXTENDED-Anweisung zurückgegeben wird.
  • Klicken Sie auf der Registerkarte Herkunft der materialisierten Sicht auf Pipelines und dann auf den Link zur Pipeline.

Beenden einer aktiven Aktualisierung

Um eine aktive Aktualisierung in der Delta Live Tables-Benutzeroberfläche zu beenden, klicken Sie auf der Seite Pipelinedetails auf Beenden, um die Aktualisierung der Pipeline zu stoppen. Sie können die Aktualisierung auch über die Databricks CLI oder den Vorgang POST /api/2.0/pipelines/{pipeline_id}/stop in der Pipelines-API beenden.

Ändern des Besitzers einer materialisierten Sicht

Sie können den Besitzer einer materialisierten Sicht ändern, wenn Sie sowohl ein Metastoreadministrator als auch ein Arbeitsbereichsadministrator sind. Materialisierte Sichten erstellen und verwenden Delta Live Tables-Pipelines automatisch, um Änderungen zu verarbeiten. Führen Sie die folgenden Schritte aus, um den Besitzer einer materialisierten Sicht zu ändern:

  • Klicken Sie auf Symbol „Aufträge“Workflows und klicken Sie dann auf die Registerkarte Delta Live Tables.
  • Klicken Sie auf den Namen der Pipeline, deren Besitzer Sie ändern möchten.
  • Klicken Sie rechts neben dem Pipelinenamen auf das Kebab-Menü-Kebab-Menü, und klicken Sie dann auf Berechtigungen. Dadurch wird das Dialogfeld „Berechtigungen“ geöffnet.
  • Klicken Sie auf x rechts neben dem Namen des aktuellen Besitzers, um den aktuellen Besitzer zu entfernen.
  • Beginnen Sie mit der Eingabe, um die Liste der verfügbaren Benutzer zu filtern. Klicken Sie auf den Benutzer, welcher der neue Pipelinebesitzer sein soll.
  • Klicken Sie auf Speichern, um Ihre Änderungen zu speichern und das Dialogfeld zu schließen.

Alle Pipelineressourcen, einschließlich materialisierter Sichten, die in der Pipeline definiert sind, gehören dem neuen Pipelinebesitzer. Alle zukünftigen Updates werden mit der Identität des neuen Besitzers ausgeführt.

Steuern des Zugriffs auf materialisierte Sichten

Materialisierte Sichten unterstützen umfassende Zugriffskontrollen, um die Datenfreigabe zu unterstützen und gleichzeitig die Offenlegung potenziell privater Daten zu vermeiden. Besitzer*innen einer materialisierten Sicht können anderen Benutzer*innen SELECT-Berechtigungen gewähren. Benutzer*innen mit SELECT-Zugriff auf die materialisierte Sicht benötigen keinen SELECT-Zugriff auf die Tabellen, auf die die materialisierte Sicht verweist. Diese Zugriffskontrolle ermöglicht die Freigabe von Daten und steuert gleichzeitig den Zugriff auf die zugrunde liegenden Daten.

Gewähren von Berechtigungen für eine materialisierte Sicht

Verwenden Sie die GRANT-Anweisung, um Zugriff auf eine materialisierte Sicht zu gewähren:

GRANT
  privilege_type [, privilege_type ] ...
  ON <mv_name> TO principal;

Es können folgende privilege_type-Werte angegeben werden:

  • SELECT: Benutzer*innen können die materialisierte Sicht SELECT.
  • REFRESH: Benutzer*innen können die materialisierte Sicht REFRESH. Aktualisierungen werden mit den Rechten des Besitzers bzw. der Besitzerin ausgeführt.

Das folgende Beispiel erstellt eine materialisierte Sicht und gewährt einem Benutzer bzw. einer Benutzerin Auswahl- und Aktualisierungsberechtigungen:

CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;

Widerrufen von Berechtigungen für eine materialisierte Sicht

Verwenden Sie die Anweisung REVOKE, um den Zugriff aus einer materialisierten Sicht zu widerrufen:

REVOKE
  privilege_type [, privilege_type ]
  ON <name> FROM principal;

Wenn den Besitzer*innen der materialisierten Sicht oder anderen Benutzer*innen, denen SELECT-Berechtigungen für die materialisierte Sicht gewährt wurden, die SELECT-Berechtigungen für eine Basistabelle entzogen werden oder die Basistabelle gelöscht wird, können die Besitzer*innen der materialisierten Sicht oder die Benutzer*innen, denen Zugriff gewährt wurde, die materialisierte Sicht weiterhin abfragen. Es kommt jedoch zu folgendem Verhalten:

  • Die Besitzer*innen der materialisierten Sicht oder andere Benutzer*innen, die den Zugriff auf eine materialisierte Sicht verloren haben, können diese materialisierte Sicht nicht mehr über REFRESH aktualisieren, sodass die materialisierte Sicht nicht länger aktuell ist.
  • Wenn die Automatisierung per Zeitplan erfolgt, schlägt der nächste geplante REFRESH-Vorgang fehl oder wird nicht ausgeführt.

Im folgenden Beispiel wird mv1 die SELECT-Berechtigung entzogen:

REVOKE SELECT ON mv1 FROM user1;

Aktivieren des Änderungsdatenfeeds

Der Datenfeed ist für die Basistabellen der materialisierten Sichten erforderlich, mit Ausnahme bestimmter erweiterter Anwendungsfälle. Wenn Sie den Datenfeed für eine Basistabelle aktivieren möchten, legen Sie die Eigenschaft der Tabelle delta.enableChangeDataFeed mithilfe der folgenden Syntax fest:

ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Anzeigen des Aktualisierungsverlaufs für eine materialisierte Sicht

Um den Status von REFRESH-Vorgängen in einer materialisierten Sicht anzuzeigen, einschließlich aktueller und vergangener Aktualisierungen, fragen Sie das Delta Live Tables-Ereignisprotokoll ab:

SELECT
  *
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = "update_progress"
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?.

Bestimmen, ob eine inkrementelle oder vollständige Aktualisierung durchgeführt wird

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?.

Einschränkungen

  • Es gelten Einschränkungen bezüglich der Verwaltung von materialisierten Sichten und dazu, wo sie abgefragt werden können:

    • Materialisierte Databricks SQL-Sichten können nur in SQL-Warehouses vom Typ „Pro“ und in serverlosen SQL-Warehouses erstellt und aktualisiert werden.
    • Eine materialisierte Ansicht von Databricks SQL kann nur von dem Arbeitsbereich aus aktualisiert werden, in dem sie erstellt wurde.
    • Materialisierte Databricks SQL-Sichten können nur über Databricks SQL-Warehouses, Delta Live Tables und freigegebene Cluster mit Databricks Runtime 11.3 oder höher abgefragt werden. Sie können materialisierte Sichten nicht über Cluster im Zugriffsmodus für Einzelbenutzer abfragen.
  • Materialisierte Sichten unterstützen keine Identitätsspalten oder Ersatzschlüssel.

  • Wenn eine materialisierte Sicht ein Summenaggregat über eine NULL-fähige Spalte verwendet und nur NULL-Werte in dieser Spalte verbleiben, lautet der resultierende Aggregatwert der materialisierten Sicht 0 anstelle von NULL.

  • Die zugrunde liegenden Dateien, die materialisierte Sichten unterstützen, können Daten aus Upstreamtabellen (einschließlich möglicher personenbezogener Informationen) enthalten, die in der Definition der materialisierten Sicht nicht angezeigt werden. Diese Daten werden automatisch zum zugrunde liegenden Speicher hinzugefügt, um die inkrementelle Aktualisierung materialisierter Sichten zu unterstützen. Da die zugrunde liegenden Dateien einer materialisierten Sicht möglicherweise das Risiko bergen, dass Daten aus Upstreamtabellen verfügbar gemacht werden, die nicht Teil des Schemas der materialisierten Sicht sind, empfiehlt Databricks, den zugrunde liegenden Speicher nicht für nicht vertrauenswürdige Downstreamconsumer freizugeben. Angenommen, die Definition einer materialisierten Sicht enthält eine Klausel COUNT(DISTINCT field_a). Obwohl die Definition der materialisierten Sicht nur die Aggregatklausel COUNT DISTINCT enthält, enthalten die zugrunde liegenden Dateien eine Liste der tatsächlichen Werte von field_a.

  • Datenbricks-SQL-materialisierte Ansichten werden in den Regionen South Central US und West US 2 nicht unterstützt.