Arbeiten mit Unity Catalog und dem Legacy-Hive-Metastore

In diesem Artikel wird erläutert, wie Sie den Hive-Metastore pro Arbeitsbereich verwenden, wenn Ihr Azure Databricks-Arbeitsbereich für Unity Catalog aktiviert ist.

Wenn Ihr Arbeitsbereich in Betrieb war, bevor er für Unity Catalog aktiviert wurde, verfügt er wahrscheinlich über einen Hive-Metastore, der Daten enthält, die Sie weiterhin verwenden möchten. Databricks empfiehlt, die Tabellen, die vom Hive-Metastore verwaltet werden, zum Unity Catalog-Metastore zu migrieren. Wenn Sie sich dagegen entscheiden, wird in diesem Artikel erläutert, wie Sie mit Daten arbeiten, die von beiden Metastores verwaltet werden.

Abfragen des Hive-Metastores in Unity Catalog

Der Unity Catalog-Metastore ist additiv. Das bedeutet, dass er mit dem arbeitsbereichbezogenen Hive-Metastore in Azure Databricks verwendet werden kann. Der Hive-Metastore wird im dreistufigen Namespace als Top-Level-Katalog namens hive_metastore angegeben.

Sie können beispielsweise im Hive-Legacymetastore auf eine Tabelle mit dem Namen sales_raw im Schema sales verweisen, indem Sie die folgende Notation verwenden:

SQL

SELECT * from hive_metastore.sales.sales_raw;

Python

display(spark.table("hive_metastore.sales.sales_raw"))

R

library(SparkR)

display(tableToDF("hive_metastore.sales.sales_raw"))

Scala

display(spark.table("hive_metastore.sales.sales_raw"))

Sie können den Katalog und das Schema auch mit einer USE-Anweisung angeben:

SQL

USE hive_metastore.sales;
SELECT * from sales_raw;

Python

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

R

library(SparkR)

sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))

Scala

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

Zugriffssteuerung in Unity Catalog und im Hive-Metastore

Wenn Sie die Tabellenzugriffssteuerung für den Hive-Metastore konfiguriert haben, erzwingt Databricks diese Zugriffssteuerungen weiterhin für Daten im Katalog hive_metastore für Cluster, die im Modus für gemeinsamen Zugriff ausgeführt werden. Das Unity Catalog-Zugriffsmodell unterscheidet sich geringfügig von den Legacy-Zugriffssteuerungen, z. B. keine DENY-Anweisungen. Der Hive-Metastore ist ein Objekt auf Arbeitsbereichsebene. Die im hive_metastore-Katalog definierten Berechtigungen beziehen sich immer auf die lokalen Benutzer und Gruppen im Arbeitsbereich. Weitere Informationen finden Sie unter Unterschiede zur Tabellenzugriffssteuerung.

Unterschiede zur Tabellenzugriffssteuerung

Bei Unity Catalog bestehen die folgenden entscheidenden Unterschiede zur Verwendung der Tabellenzugriffssteuerungen im Hive-Legacymetastore für einzelne Arbeitsbereiche.

Das Zugriffssteuerungsmodell in Unity Catalog unterscheidet sich folgendermaßen von der Tabellenzugriffssteuerung:

  • Kontengruppen: Die Zugriffssteuerungsrichtlinien in Unity Catalog werden auf Kontogruppen angewendet, während die Zugriffssteuerungsrichtlinien für den Hive-Metastore auf arbeitsbereichslokale Gruppen angewendet werden. Weitere Informationen finden Sie unter Unterschied zwischen Kontogruppen und arbeitsbereichslokalen Gruppen.
  • Die Berechtigungen , USE CATALOG und USE SCHEMA für den Katalog und das Schema sind für alle Vorgänge für Objekte innerhalb des Katalogs oder Schemas erforderlich: Unabhängig von den Berechtigungen eines Prinzipals für eine Tabelle muss der Prinzipal auch über die USE CATALOG-Berechtigung für seinen übergeordneten Katalog für den Zugriff auf das Schema und die USE SCHEMA-Berechtigung für den Zugriff auf Objekte innerhalb des Schemas verfügen. Bei Tabellenzugriffssteuerungen auf Arbeitsbereichsebene führt das Erteilen von USAGE für den Stammkatalog andererseits automatisch dazu, dass USAGE für alle Datenbanken erteilt wird. Die Berechtigung USAGE ist für den Stammkatalog jedoch nicht erforderlich.
  • Sichten: In Unity Catalog muss der oder die Besitzer*in einer Sicht kein*e Besitzer*in der Verweistabellen und -sichten sein. Die Berechtigung SELECT ist ausreichend, zusammen mit USE SCHEMA für das übergeordnete Schema der Ansichten und USE CATALOG für den übergeordneten Katalog. Bei Tabellenzugriffssteuerungen auf Arbeitsbereichsebene muss der oder die Besitzer*in einer Sicht alle Verweistabellen und -sichten besitzen.
  • Keine Unterstützung für ANY FILE oder ANONYMOUS FUNCTION: Im Unity-Katalog gibt es kein Konzept eines ANY FILE oder ANONYMOUS FUNCTION sicherungsfähigen Elements, das es einem nicht privilegierten Benutzer ermöglicht, privilegierten Code auszuführen.
  • Keine READ_METADATA Berechtigungen: Der Unity-Katalog verwaltet den Zugriff auf das Anzeigen von Metadaten auf eine andere Weise. Weitere Informationen finden Sie unter Unity Catalog-Berechtigungen und sicherungsfähige Objekte.

Joins zwischen Unity Catalog und Hive-Metastore-Objekten

Durch die dreistufige Namespacenotation können Sie die Daten in einem Unity Catalog-Metastore mit den Daten in einem Hive-Legacymetastore verknüpfen.

Hinweis

Ein Join mit den Daten im Hive-Legacymetastore funktioniert nur in dem Arbeitsbereich, in dem sich diese Daten befinden. Der Versuch, einen solchen Join in einem anderen Arbeitsbereich durchzuführen, führt zu einem Fehler. Azure Databricks empfiehlt, Legacytabellen und -sichten auf Unity Catalog upzugraden.

Im folgenden Beispiel werden Ergebnisse aus der Tabelle sales_current im Hive-Legacymetastore mit der Tabelle sales_historical im Unity Catalog-Metastore verknüpft, wenn die Felder order_id identisch sind.

SQL

SELECT * FROM hive_metastore.sales.sales_current
JOIN main.shared_sales.sales_historical
ON hive_metastore.sales.sales_current.order_id = main.shared_sales.sales_historical.order_id;

Python

dfCurrent = spark.table("hive_metastore.sales.sales_current")
dfHistorical = spark.table("main.shared_sales.sales_historical")

display(dfCurrent.join(
  other = dfHistorical,
  on = dfCurrent.order_id == dfHistorical.order_id
))

R

library(SparkR)

dfCurrent = tableToDF("hive_metastore.sales.sales_current")
dfHistorical = tableToDF("main.shared_sales.sales_historical")

display(join(
  x = dfCurrent,
  y = dfHistorical,
  joinExpr = dfCurrent$order_id == dfHistorical$order_id))

Scala

val dfCurrent = spark.table("hive_metastore.sales.sales_current")
val dfHistorical = spark.table("main.shared_sales.sales_historical")

display(dfCurrent.join(
  right = dfHistorical,
  joinExprs = dfCurrent("order_id") === dfHistorical("order_id")
))

Standardkatalog

Ein Standardkatalog ist für jeden Arbeitsbereich konfiguriert, der für Unity Catalog aktiviert ist.

Wenn Sie bei der Durchführung von Datenoperationen den Namen des obersten Katalogs weglassen, wird der Standardkatalog angenommen.

Der anfänglich für Ihren Arbeitsbereich konfigurierte Standardkatalog hängt davon ab, wie Ihr Arbeitsbereich für Unity Catalog aktiviert wurde:

  • Wenn Ihr Arbeitsbereich für Unity Catalog automatisch aktiviert wurde, wurde der Arbeitsbereichskatalog als Standardkatalog eingestellt. Siehe Automatische Aktivierung des Unity Catalog.
  • Wenn Ihr Arbeitsbereich manuell für Unity-Katalog aktiviert wurde, wurde der hive_metastore-Katalog als Standardkatalog eingestellt.

Wenn Sie aus dem Hive-Metastore zu Unity Catalog innerhalb eines vorhandenen Arbeitsbereichs wechseln, ist es in der Regel sinnvoll, hive_metastore als Standardkatalog zu verwenden, um zu vermeiden, dass der vorhandene Code, der auf den Struktur-Metastore verweist, beeinträchtigt wird.

Informationen zum Abrufen und Wechseln des Standardkatalogs finden Sie unter Verwalten des Standardkatalogs

Clusterspezifische Datenzugriffsberechtigungen

Wenn Sie den Hive-Metastore zusammen mit Unity Catalog verwenden, werden die dem Cluster zugeordneten Anmeldeinformationen für den Datenzugriff für den Zugriff auf die Daten im Hive-Metastore verwendet, aber nicht für in Unity Catalog registrierte Daten.

Wenn Benutzer*innen auf Pfade außerhalb von Unity Catalog zugreifen (beispielsweise auf einen Pfad, der nicht als Tabelle oder externer Speicherort registriert ist), werden die dem Cluster zugeordneten Anmeldeinformationen für den Zugriff verwendet.

Weitere Informationen finden Sie unter Herstellen einer Verbindung mit Azure Data Lake Storage Gen2 und Blob Storage.

Upgraden von Legacytabellen auf Unity Catalog

Tabellen im Hive-Metastore profitieren nicht von allen Sicherheits- und Governancefeatures von Unity Catalog, zum Beispiel von der integrierten Überwachung und der Zugriffssteuerung. Databricks empfiehlt, Legacytabellen upzugraden, indem Sie zu Unity Catalog hinzugefügt werden.