Freigeben über


Verwenden materialisierter Sichten in Databricks SQL

Hinweis

Wenn Sie eine Azure Private Link-Verbindung mit Ihren materialisierten Sicht verwenden müssen, wenden Sie sich an Ihren Databricks-Mitarbeiter.

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 in Azure Databricks unterstützt. Wenn Sie eine materialisierte Ansicht in einem Databricks SQL Warehouse erstellen, wird eine serverlose Pipeline erstellt, um Aktualisierungen in der materialisierten Ansicht zu verarbeiten. Sie können den Status der Aktualisierungsvorgänge in der Delta Live Tables UI oder der Pipelines-API überwachen. Weitere Informationen finden Sie unter Anzeigen des Status der Aktualisierung einer materialisierten Sicht.

Anforderungen

So erstellen oder aktualisieren Sie materialisierte Sichten:

  • Sie müssen ein Unity Catalog-fähiges Pro- oder serverloses SQL Warehouse verwenden.

  • Um eine materialisierte Sicht zu aktualisieren, müssen Sie sich im Arbeitsbereich befinden, in dem diese erstellt wurde.

  • Ihr Arbeitsbereich muss sich in einer Region befinden, die serverlose SQL-Warehouses unterstützt.

So fragen Sie materialisierte Sichten ab:

  • Sie müssen Besitzerin oder Besitzer der materialisierten Sicht sein oder in der materialisierten Sicht SELECT sowie USE SCHEMA und USE CATALOG auf der übergeordneten Ebene haben.
  • Sie müssen eine der folgenden Computeressourcen verwenden:
    • SQL-Warehouse
    • Delta Live Tables-Interfaces
    • Zugriffsmodus „Freigegeben“ für Compute
    • Einzelbenutzerzugriffsmodus auf Databricks Runtime 15.4 und höher, solange der Arbeitsbereich für die serverlose Berechnung aktiviert ist. Weitere Informationen finden Sie unter Feinkornierte Zugriffssteuerung für die Berechnung einzelner Benutzer.
    • Nur wenn Sie der materialisierte Ansichtsbesitzer sind: eine einzelne Benutzerzugriffsmodus-Computeressource, die Databricks Runtime zwischen 14.3 und 15.3 ausführt.

Informationen zu anderen Einschränkungen bei der Verwendung materialisierter Sichten finden Sie unter Einschränkungen.

Erstellen einer materialisierten Sicht

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. Das Erstellen einer materialisierten Ansicht ist ein synchroner Vorgang, was bedeutet, dass der Befehl CREATE MATERIALIZED VIEW zu einer Sperrung führt, bis die materialisierte Sicht erstellt und der anfängliche Datenladevorgang abgeschlossen ist. Für jede materialisierte Databricks SQL-Sicht wird automatisch eine serverlose Delta Live Tables-Pipeline erstellt. Wenn die materialisierte Sicht aktualisiert wird, verarbeitet die Delta-Live-Tabellen-Pipeline die Aktualisierung.

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

Sie können den Laufzeitkanal auswählen, in dem die Create-Anweisung mit der TBLPROPERTIES Klausel ausgeführt wird, auf die der Wert festgelegt oder "CURRENT"festgelegt "PREVIEW" ist. Der Standardwert ist "CURRENT". Weitere Informationen zu Delta Live Tables-Kanälen finden Sie unter Delta Live Tables-Laufzeitkanäle. Ausführliche Informationen zu Syntax und Parametern finden Sie unter MATERIALISIERTE ANSICHT ERSTELLEN.

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
  base_table1
GROUP BY
  date;

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. Der Vorgang ist standardmäßig synchron, d. h., der Befehl blockiert, bis der Aktualisierungsvorgang abgeschlossen ist. Zum Erstellen einer materialisierten Sicht verwenden Sie die REFRESH MATERIALIZED VIEW-Anweisung. Ausführliche Informationen zur SQL-Syntax und zu den Parametern für diesen Befehl finden Sie unter AKTUALISIEREN (MATERIALISIERTE ANSICHT oder STREAMING TABELLE). Weitere Informationen zu den Typen materialisierter Ansichten, die inkrementell aktualisiert werden können, finden Sie unter Inkrementelle Aktualisierung für materialisierte Ansichten.

Verwenden Sie zum Übermitteln einer Aktualisierungsanweisung den SQL-Editor in der Azure Databricks-Benutzeroberfläche, ein an ein SQL-Warehouse angeschlossenes Notebook, 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 Sichten erstellen und verwenden serverlose Delta Live Tables-Pipelines automatisch, um Aktualisierungsvorgänge zu verarbeiten. Die Aktualisierung wird von der Delta Live Tables-Pipeline verwaltet, und das Update wird vom SQL-Warehouse von Databricks überwacht, das zum Erstellen der materialisierten Ansicht verwendet wird. Materialisierte Ansichten können mithilfe einer Delta Live Tables-Pipeline aktualisiert werden, die in einem Zeitplan ausgeführt wird. Siehe "Triggered vs. continuous pipeline mode".

Hinweis

Die Delta Live Tables-Runtime kann keine Änderungen in Nicht-Delta-Datenquellen erkennen. Die Tabelle wird weiterhin regelmäßig aktualisiert, jedoch mit einem höheren Standardtriggerintervall, um zu verhindern, dass übermäßige Neucomputation jegliche inkrementelle Verarbeitung im Compute verlangsamt.

Aktualisierungsvorgänge werden standardmäßig synchron ausgeführt. Sie können auch einen Aktualisierungsvorgang so festlegen, dass er asynchron ausgeführt wird. Dies kann mithilfe des Aktualisierungsbefehls festgelegt werden. Siehe REFRESH (MATERIALIZED VIEW or STREAMING TABLE) Das Verhalten, das den einzelnen Ansätzen zugeordnet ist, lautet wie folgt:

  • Synchron: Eine synchrone Aktualisierung verhindert, dass andere Vorgänge fortgesetzt werden, bis die Aktualisierung abgeschlossen ist. Wenn das Ergebnis für den nächsten Schritt erforderlich ist, z. B. beim Sequenzieren von Aktualisierungsvorgängen in Orchestrierungstools wie Databricks-Aufträgen, verwenden Sie eine synchrone Aktualisierung. Um materialisierte Ansichten mit einem Auftrag zu koordinieren, verwenden Sie den SQL-Aufgabentyp . Weitere Informationen finden Sie unter Planen und Orchestrieren von Workflows.
  • Asynchron: Eine asynchrone Aktualisierung startet einen Hintergrundauftrag für Delta Live Tables, der berechnet wird, wenn eine materialisierte Ansicht aktualisiert wird, sodass der Befehl zurückgegeben werden kann, bevor die Daten geladen werden. Dieser Aktualisierungstyp kann Kosten sparen, da der Vorgang nicht unbedingt Rechenkapazität im Lager enthält, in dem der Befehl initiiert wird. Wenn die Aktualisierung leer ist und keine anderen Aufgaben ausgeführt werden, kann das Lager heruntergefahren werden, während die Aktualisierung andere verfügbare Compute verwendet. Darüber hinaus unterstützen asynchrone Aktualisierungen das Starten mehrerer Vorgänge parallel.

Einige Abfragen können inkrementell aktualisiert werden. Siehe inkrementelle Aktualisierung für materialisierte Ansichten. 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. Führen Sie zum Festlegen eines Zeitplans eine der folgenden Aktionen aus:

Beim Erstellen eines Zeitplans wird automatisch ein neuer Databricks-Auftrag konfiguriert, um die Aktualisierung zu verarbeiten.

Führen Sie zum Anzeigen des Zeitplans einen der folgenden Schritte aus:

  • Führen Sie die DESCRIBE EXTENDED Anweisung aus dem SQL-Editor in der Azure Databricks-Benutzeroberfläche aus.
  • Verwenden Sie den Katalog-Explorer, um die materialisierte Ansicht anzuzeigen. Der Zeitplan wird auf der Registerkarte Übersicht unter Aktualisierungsstatus aufgeführt. Weitere Informationen finden Sie unter Was ist der Katalog-Explorer?.

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:

  • Kopieren Sie den Link, der in der Zeile Neueste Aktualisierung der von der Anweisung DESCRIBE EXTENDED zurückgegebenen Tabelle angezeigt wird, und fügen Sie ihn ein.
  • Klicken Sie auf der Registerkarte Herkunft der materialisierten Sicht auf Pipelines und dann auf den Link zur Pipeline.

Bei asynchronen REFRESH Befehlen, die mit dem SQL-Editor in der Azure Databricks-Benutzeroberfläche übermittelt werden, können Sie den Aktualisierungsstatus anzeigen, indem Sie auf den im Ergebnisbereich gezeigten Link folgen.

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.

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.

Ä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 der Registerkarte Herkunft der materialisierten Sicht auf Pipelines und dann auf den Link zur Pipeline.
  • 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?.

Einschränkungen

  • Informationen zu Compute- und Arbeitsbereichsanforderungen finden Sie unter Anforderungen.
  • 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.
  • Sie können einen Datenänderungsfeed nicht aus einer materialisierten Ansicht lesen.
  • 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.