Freigeben über


Verwenden Sie Unity Catalog mit Ihren Lakeflow Declarative Pipelines

Databricks empfiehlt, lakeflow Declarative Pipelines mit Unity Catalog zu konfigurieren.

Mit Unity Catalog konfigurierte Pipelines veröffentlichen alle definierten materialisierten Ansichten und Streaming-Tabellen im angegebenen Katalog und Schema. Unity Catalog-Pipelines können aus anderen Unity Catalog-Tabellen und -Volumes gelesen werden.

Verwenden Sie GRANT und REVOKE, um Berechtigungen für die Tabellen zu verwalten, die von einer Unity Catalog-Pipeline erstellt wurden.

Hinweis

In diesem Artikel werden Funktionen für den aktuellen Standardveröffentlichungsmodus für Pipelines erläutert. Pipelines, die vor dem 5. Februar 2025 erstellt wurden, könnten den Legacy-Publishing-Modus und das virtuelle Schema LIVE verwenden. Weitere Informationen finden Sie unter LIVE-Schema (Legacy).

Anforderungen

Um Streamingtabellen und materialisierte Ansichten in einem Zielschema im Unity-Katalog zu erstellen, müssen Sie über die folgenden Berechtigungen für das Schema und den übergeordneten Katalog verfügen:

  • USE CATALOG-Berechtigungen für den Zielkatalog.
  • CREATE MATERIALIZED VIEW- und USE SCHEMA-Berechtigungen für das Zielschema, wenn Ihre Pipeline materialisierte Sichten erstellt.
  • CREATE TABLE- und USE SCHEMA-Berechtigungen für das Zielschema, wenn Ihre Pipeline Streamingtabellen erstellt.

Wenn Ihre Pipeline neue Schemas erstellt, müssen Sie über USE CATALOG und CREATE SCHEMA Berechtigungen für den Zielkatalog verfügen.

Die zum Ausführen einer Unity-Katalog-unterstützten Pipeline erforderliche Rechenleistung:

Für das Abfragen von Tabellen, die von Lakeflow Declarative Pipelines mithilfe von Unity Catalog (einschließlich Streamingtabellen und materialisierter Ansichten) erstellt werden, wird Rechenleistung benötigt, die Folgendes umfasst:

  • SQL-Warehouses
  • Computeressourcen mit Standardzugriffsmodus in Databricks Runtime 13.3 LTS oder höher.
  • Computeressourcen mit dediziertem Zugriffsmodus, wenn die feinkörnige Zugriffssteuerung für dedizierte Computeressourcen aktiviert ist (d. h. auf Databricks Runtime 15.4 oder höher mit der Aktivierung von serverlosem Compute für den Arbeitsbereich). Weitere Informationen finden Sie unter Feingranulare Zugriffssteuerung auf dedizierte Rechenleistung.
  • Der dedizierte Zugriffsmodus wird auf 13.3 LTS bis 15.3 nur berechnet, wenn der Tabellenbesitzer die Abfrage ausführt.

Es gelten zusätzliche Rechenbeschränkungen. Siehe den folgenden Abschnitt.

Einschränkungen

Die folgenden Einschränkungen gelten für die Verwendung des Unity-Katalogs mit deklarativen Lakeflow-Pipelines:

  • Sie können keine Unity Catalog-fähige Pipeline in einem Arbeitsbereich erstellen, der an einen Metastore angefügt ist, der während der Public Preview des Unity Catalog erstellt wurde. Siehe Upgrade auf Privilegienvererbung.
  • JARs werden nicht unterstützt. Nur Python-Bibliotheken von Drittanbietern werden unterstützt. Siehe Verwalten von Python-Abhängigkeiten für deklarative Lakeflow-Pipelines.
  • DML-Abfragen (Data Manipulation Language), die das Schema einer Streamingtabelle ändern, werden nicht unterstützt.
  • Eine in einer Pipeline erstellte materialisierte Ansicht kann nicht als Streamingquelle außerhalb dieser Pipeline verwendet werden, z. B. in einer anderen Pipeline oder einem nachgelagerten Notizbuch.
  • Daten für materialisierte Ansichten und Streamingtabellen werden am Speicherort für das enthaltende Schema gespeichert. Wenn kein Schemaspeicherort angegeben ist, werden Tabellen im Katalogspeicherort gespeichert. Wenn Schema- und Katalogspeicherorte nicht angegeben sind, werden Tabellen im Stammspeicherort des Metastores gespeichert.
  • Auf der Registerkarte "History" des Katalog-Explorers wird der Verlauf für materialisierte Ansichten nicht angezeigt.
  • Die Eigenschaft LOCATION wird beim Definieren einer Tabelle nicht unterstützt.
  • Unity Catalog-fähige Pipelines können nicht im Hive-Metastore veröffentlichen.

Hinweis

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, eine materialisierte Ansichtsdefinition enthält eine COUNT(DISTINCT field_a) Klausel. 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.

Kann ich Hive-Metastore- und Unity-Katalogpipelines zusammen verwenden?

Ihr Arbeitsbereich kann Pipelines enthalten, die Unity-Katalog und den älteren Hive-Metaspeicher verwenden. Eine einzelne Pipeline kann jedoch nicht in den Hive-Metastore und den Unity-Katalog geschrieben werden. Vorhandene Pipelines, die in den Hive-Metaspeicher schreiben, können nicht für die Verwendung des Unity-Katalogs aktualisiert werden. Um eine vorhandene Pipeline zu migrieren, die in den Hive-Metastore schreibt, müssen Sie eine neue Pipeline erstellen und Daten aus der bzw. den Datenquellen erneut erfassen. Siehe Erstellen einer Unity-Katalogpipeline durch Klonen einer Hive-Metastore-Pipeline.

Vorhandene Pipelines, die unity Catalog nicht verwenden, sind nicht davon betroffen, neue Pipelines zu erstellen, die mit Unity-Katalog konfiguriert sind. Diese Pipelines speichern weiterhin unter Verwendung des konfigurierten Speicherorts Daten im Hive-Metastore.

Sofern in diesem Dokument nicht anders angegeben, werden alle vorhandenen Datenquellen und die Deklarative Pipeline-Funktionalität von Lakeflow mit Pipelines unterstützt, die Unity-Katalog verwenden. Sowohl die Python- als auch die SQL-Schnittstelle werden mit Pipelines unterstützt, die Unity Catalog verwenden.

Änderungen an vorhandenen Funktionen

Wenn Lakeflow Declarative Pipelines so konfiguriert ist, dass Daten im Unity-Katalog gespeichert werden, verwaltet die Pipeline den Lebenszyklus und die Berechtigungen der Tabelle. Ergebnis:

  • Wenn eine Tabelle aus der Pipelinedefinition entfernt wird, markiert die nächste Pipelineaktualisierung den entsprechenden materialisierten Ansichts- oder Streamingtabelleneintrag inaktiv. Inaktive Tabellen können weiterhin abgefragt werden, werden aber nicht aktualisiert. Um materialisierte Sichten oder Streamingtabellen zu bereinigen, können Sie explizit einen DROP-Vorgang für die Tabelle ausführen.
    • Sie können alle verworfenen Tabellen innerhalb von 7 Tagen mithilfe des UNDROP Befehls wiederherstellen.
    • Um das Legacyverhalten beizubehalten, bei dem der materialisierte Ansichts- oder Streamingtabelleneintrag im nächsten Pipelineupdate aus dem Unity-Katalog entfernt wird, legen Sie die Pipelinekonfiguration "pipelines.dropInactiveTables": "true" fest. Die tatsächlichen Daten werden für einen Zeitraum aufbewahrt, sodass sie bei versehentlicher Löschung wiederhergestellt werden können. Die Daten können innerhalb von 7 Tagen wiederhergestellt werden, indem sie die materialisierte Ansicht oder Streamingtabelle wieder zur Pipelinedefinition hinzufügen.
  • Durch das Löschen der Pipeline werden alle in dieser Pipeline definierten Tabellen gelöscht. Aufgrund dieser Änderung wird die Lakeflow Declarative Pipelines-Benutzeroberfläche aktualisiert, um Sie aufzufordern, das Löschen einer Pipeline zu bestätigen.
  • Interne Unterstützungstabellen, einschließlich solcher, die zur Unterstützung von AUTO CDC ... INTO verwendet werden, sind für Benutzende nicht direkt zugänglich.

Tabellen aus deklarativen Lakeflow-Pipelines in den Unity-Katalog schreiben

Wenn Sie Ihre Tabellen in den Unity-Katalog schreiben möchten, müssen Sie Ihre Pipeline so konfigurieren, dass sie über Ihren Arbeitsbereich damit arbeiten kann. Wenn Sie eine Pipeline erstellen, wählen Sie "Unity-Katalog" unter "Speicheroptionen" aus, wählen Sie im Dropdownmenü "Katalog" einen Katalog aus, und wählen Sie ein vorhandenes Schema aus, oder geben Sie den Namen für ein neues Schema im Dropdownmenü "Zielschema" ein. Informationen zu Unity Catalog-Katalogen finden Sie unter Was sind Kataloge in Azure Databricks?. Informationen zu Schemas in Unity Catalog finden Sie unter Was sind Schemas in Azure Databricks?.

Einspeisen von Daten in eine Unity Catalog-Pipeline

Ihre Pipeline, die für die Verwendung von Unity Catalog konfiguriert ist, kann Daten aus folgenden Quellen lesen:

  • Von Unity Catalog verwaltete und externe Tabellen, Ansichten, materialisierte Sichten und Streamingtabellen
  • Hive-Metastore-Tabellen und -Ansichten.
  • Autoloader mit der Funktion read_files() zum Lesen aus externen Unity Catalog-Speicherorten.
  • Apache Kafka und Amazon Kinesis.

Im Folgenden sind Beispiele für das Lesen aus Unity Catalog- und Hive-Metastore-Tabellen aufgeführt.

Batcherfassung aus einer Unity Catalog-Tabelle

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  my_catalog.my_schema.table1;

Python

@dlt.table
def table_name():
  return spark.read.table("my_catalog.my_schema.table")

Streamen von Änderungen aus einer Unity Catalog-Tabelle

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  STREAM(my_catalog.my_schema.table1);

Python

@dlt.table
def table_name():
  return spark.readStream.table("my_catalog.my_schema.table")

Erfassen von Daten aus dem Hive-Metastore

Eine Pipeline, die Unity Catalog verwendet, kann Daten aus Hive-Metastore-Tabellen mithilfe des Katalogs hive_metastore lesen:

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  hive_metastore.some_schema.table;

Python

@dlt.table
def table3():
  return spark.read.table("hive_metastore.some_schema.table")

Einlesen von Daten aus dem Auto Loader

SQL

CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
FROM STREAM read_files(
  "/path/to/uc/external/location",
  format => "json"
)

Python

@dlt.table(table_properties={"quality": "bronze"})
def table_name():
  return (
     spark.readStream.format("cloudFiles")
     .option("cloudFiles.format", "json")
     .load(f"{path_to_uc_external_location}")
 )

Freigeben materialisierter Sichten

Standardmäßig verfügt nur der Pipelinebesitzer über die Berechtigung zum Abfragen von Datasets, die von der Pipeline erstellt wurden. Sie können anderen Benutzenden die Möglichkeit geben, eine Tabelle mithilfe von GRANT-Anweisungen abzufragen, und Sie können den Abfragezugriff mithilfe von REVOKE-Anweisungen widerrufen. Weitere Informationen zu Berechtigungen in Unity Catalog finden Sie unter Verwalten von Berechtigungen in Unity Catalog.

Gewähren einer Auswahl für eine Tabelle

GRANT SELECT ON TABLE
  my_catalog.my_schema.table_name
TO
  `user@databricks.com`

Widerrufen einer Auswahl für eine Tabelle

REVOKE SELECT ON TABLE
  my_catalog.my_schema.table_name
FROM
  `user@databricks.com`

Erteilen von Berechtigungen zum Erstellen von Tabellen oder zum Erstellen materialisierter Sichten

GRANT CREATE { MATERIALIZED VIEW | TABLE } ON SCHEMA
  my_catalog.my_schema
TO
  { principal | user }

Anzeigen der Herkunft für eine Pipeline

Die Herkunft von Tabellen in Lakeflow Declarative Pipelines ist im Catalog Explorer sichtbar. Für materialisierte Sichten oder Streamingtabellen in einer Pipeline mit Unity Catalog-Unterstützung zeigt die Herkunftsbenutzeroberfläche des Katalog-Explorers die Upstream- und Downstreamtabellen an. Weitere Informationen zur Unity-Katalog-Linie finden Sie unter Anzeigen der Datenlinie mithilfe des Unity-Katalogs.

Für eine materialisierte Ansicht oder eine Streaming-Tabelle in einer Unity Catalog-fähigen Pipeline wird die Catalog Explorer-Benutzeroberfläche für die Herkunft auch mit der Pipeline verlinkt, die die materialisierte Ansicht oder Streaming-Tabelle erzeugt hat, wenn die Pipeline vom aktuellen Arbeitsbereich aus zugänglich ist.

Hinzufügen, Ändern oder Löschen von Daten in einer Streamingtabelle

Mithilfe von DML-Anweisungen (Insert, Update, Delete und Merge) können Sie Streamingtabellen ändern, die im Unity-Katalog veröffentlicht wurden. Die Unterstützung von DML-Abfragen für Streamingtabellen ermöglicht Anwendungsfälle wie das Aktualisieren von Tabellen für die Einhaltung der Datenschutz-Grundverordnung (DSGVO).

Hinweis

  • DML-Anweisungen, die das Tabellenschema einer Streamingtabelle ändern, werden nicht unterstützt. Stellen Sie sicher, dass Ihre DML-Anweisungen nicht versuchen, das Tabellenschema weiterzuentwickeln.
  • DML-Anweisungen, die eine Streamingtabelle aktualisieren, können nur in einem freigegebenen Unity Catalog-Cluster oder einem SQL-Warehouse mit Databricks Runtime 13.3 LTS und höher ausgeführt werden.
  • Da für das Streaming Datenquellen im Nur-Anfügen-Modus benötigt werden, legen Sie das Flag skipChangeCommits beim Lesen der Streamingquelltabelle fest, wenn Ihre Verarbeitung Streaming aus einer Streamingquelltabelle mit Änderungen (z. B. durch DML-Anweisungen) erfordert. Wenn skipChangeCommits festgelegt ist, werden Transaktionen, die Datensätze in der Quelltabelle löschen oder ändern, ignoriert. Wenn Ihre Verarbeitung keine Streamingtabelle erfordert, können Sie eine materialisierte Ansicht (die nicht die Einschränkung „nur Anhängen“ hat) als Zieltabelle verwenden.

Im Folgenden sind Beispiele für DML-Anweisungen zum Ändern von Datensätzen in einer Streamingtabelle aufgeführt.

Löschen von Datensätzen mit einer bestimmten ID:

DELETE FROM my_streaming_table WHERE id = 123;

Aktualisieren von Datensätzen mit einer bestimmten ID:

UPDATE my_streaming_table SET name = 'Jane Doe' WHERE id = 123;

Veröffentlichen von Tabellen mit Zeilenfiltern und Spaltenmasken

Wichtig

Dieses Feature befindet sich in der Public Preview.

Mit Zeilenfiltern können Sie eine Funktion angeben, die als Filter gilt, wenn ein Tabellenscan Zeilen abruft. Mit diesen Filtern können Sie sicherstellen, dass nachfolgende Abfragen nur Zeilen zurückgeben, für die das Filterprädikat zu TRUE ausgewertet wird.

Mit Spaltenmasken lassen sich die Werte einer Spalte maskieren, wenn ein Tabellenscan Zeilen ausliest. Zukünftige Abfragen für diese Spalte geben das Ergebnis der ausgewerteten Funktion anstelle des ursprünglichen Werts der Spalte zurück. Weitere Informationen zur Verwendung von Zeilenfiltern und Spaltenmasken finden Sie unter Zeilenfilter und Spaltenmasken.

Verwalten von Zeilenfiltern und Spaltenmasken

Zeilenfilter und Spaltenmasken für materialisierte Sichten und Streamingtabellen sollten mithilfe der CREATE OR REFRESH-Anweisung hinzugefügt, aktualisiert oder gelöscht werden.

Ausführliche Syntax zum Definieren von Tabellen mit Zeilenfiltern und Spaltenmasken finden Sie unter Lakeflow Declarative Pipelines SQL-Sprachreferenz und Lakeflow Declarative Pipelines Python-Sprachreferenz.

Verhalten

Im Folgenden sind wichtige Details beim Verwenden von Zeilenfiltern oder Spaltenmasken in Lakeflow Declarative Pipelines aufgeführt:

  • Als Besitzer aktualisieren: Wenn eine Pipelineaktualisierung eine materialisierte Ansicht oder Streamingtabelle aktualisiert, werden Zeilenfilter- und Spaltenmaskenfunktionen mit den Rechten des Pipelinebesitzers ausgeführt. Dies bedeutet, dass die Tabellenaktualisierung den Sicherheitskontext des Benutzers verwendet, der die Pipeline erstellt hat. Funktionen, die den Benutzerkontext überprüfen (wie z. B. CURRENT_USER und IS_MEMBER), werden mithilfe des Benutzerkontexts des Pipelinebesitzers ausgewertet.
  • Abfrage: Beim Abfragen einer materialisierten Ansicht oder einer Streamingtabelle werden Funktionen, die den Benutzerkontext überprüfen (wie z. B. CURRENT_USER und IS_MEMBER), anhand des Benutzerkontexts des Aufrufers ausgewertet. Dieser Ansatz erzwingt benutzerspezifische Datensicherheit und Zugriffssteuerungen basierend auf dem Kontext des aktuellen Benutzers.
  • Beim Erstellen materialisierter Sichten über Quelltabellen, die Zeilenfilter und Spaltenmasken enthalten, ist die Aktualisierung der materialisierten Sicht immer eine vollständige Aktualisierung. Bei einer vollständigen Aktualisierung werden alle in der Quelle verfügbaren Daten mit den neuesten Definitionen aktualisiert. Dieser Prozess stellt sicher, dass Sicherheitsrichtlinien der Quelltabellen ausgewertet und mit den aktuellen Daten und Definitionen aktualisiert werden.

Observierbarkeit

Verwenden Sie DESCRIBE EXTENDED, INFORMATION_SCHEMAoder den Katalog-Explorer, um die vorhandenen Zeilenfilter und Spaltenmasken zu untersuchen, die für eine bestimmte materialisierte Ansicht oder Streaming-Tabelle gelten. Mit dieser Funktionalität können Benutzer Datenzugriffs- und Schutzmaßnahmen für materialisierte Sichten und Streamingtabellen überwachen und überprüfen.