Freigeben über


Arbeiten mit dem veralteten Hive-Metastore und dem Unity-Katalog

In diesem Artikel wird ein Ansatz erläutert, um weiterhin den legacy-Hive-Metaspeicher pro Arbeitsbereich zu verwenden, wenn Ihr Azure Databricks-Arbeitsbereich für Unity-Katalog aktiviert ist.

Wenn Sich Ihr Arbeitsbereich vor der Aktivierung für den Unity-Katalog in Dienst befand, verfügt er wahrscheinlich über einen Hive-Metaspeicher, der Daten enthält, die Sie möglicherweise weiterhin verwenden möchten. In diesem Artikel wird beschrieben, wie Sie weiterhin mit Tabellen arbeiten, die in einem Hive-Metaspeicher registriert sind.

Important

Der Hive-Metaspeicher pro Arbeitsbereich ist ein Legacy-Feature, und die Anweisungen in diesem Artikel stellen veraltete Arbeitsabläufe dar.

Tabellen im Hive-Metastore profitieren nicht von allen von Unity Catalog bereitgestellten Sicherheits- und Governancefeatures, zum Beispiel von der integrierten Überwachung, Herkunft und der Zugriffssteuerung. Databricks empfiehlt, diese Tabellen und arbeitslasten zu migrieren, die auf den Unity-Katalog verweisen, und den direkten Zugriff auf den Hive-Metastore zu deaktivieren.

Es stehen zwei Migrationspfade zur Verfügung:

  • Aktualisieren Sie alle Tabellen, die im Hive-Metastore registriert sind, auf den Unity-Katalog.

  • Verbinden Sie Ihren Hive-Metaspeicher mit dem Unity-Katalog, indem Sie den Hive-Metastore-Partnerverbund verwenden, um einen schrittweiseren Ansatz zu erreichen. Der Hive-Metastore-Partnerverbund erstellt einen externen Katalog in Unity Catalog, der den Hive-Metastore spiegelt.

Siehe Upgrade von Azure Databricks-Arbeitsbereichen auf den Unity-Katalog.

Abfrage der veralteten Hive-Metadatenbank im Unity-Katalog

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 im Unity-Katalog im Vergleich zum legacy-Hive-Metaspeicher

Wenn Sie die alte Tabellenzugriffskontrolle im Hive-Metastore konfiguriert haben, erzwingt Databricks weiterhin diese Zugriffssteuerelemente für Daten im hive_metastore Katalog bei Clustern, die im Standard-Zugriffsmodus laufen.

Das Unity-Katalog-Zugriffsmodell unterscheidet sich geringfügig von älteren Zugriffssteuerelementen:

  • Metastore: Der Unity-Katalog ist ein Objekt auf Kontoebene, und der Hive-Metaspeicher ist ein Objekt auf Arbeitsbereichsebene. Die im hive_metastore-Katalog definierten Berechtigungen beziehen sich immer auf die lokalen Benutzer und Gruppen im Arbeitsbereich.
  • Kontengruppen: Die Zugriffssteuerungsrichtlinien in Unity Catalog werden auf Kontogruppen angewendet, während die Zugriffssteuerungsrichtlinien für den Hive-Metastore auf arbeitsbereichslokale Gruppen angewendet werden. Siehe Gruppenquellen.
  • USE CATALOG und USE SCHEMA Berechtigungen sind für den Katalog und das Schema 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 Berechtigungen für seinen USE CATALOG übergeordneten Katalog verfügen, um auf das Schema und die USE SCHEMA Berechtigungen für den Zugriff auf Objekte innerhalb des Schemas zuzugreifen. 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.
  • Ansichten: Im Unity-Katalog muss der Besitzer einer Ansicht kein Besitzer der referenzierten Tabellen und Ansichten der Ansicht 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 Zugriffskontrollen auf Tabellen auf der Arbeitsbereichsebene muss der Besitzer einer Ansicht auch Besitzer aller referenzierten Tabellen und Ansichten sein.
  • 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 Unterstützung für DENY: Das Unity Catalog-Berechtigungsmodell basiert auf dem Prinzip der geringsten Berechtigungen. Nicht gewährte Berechtigungen werden implizit verweigert.
  • 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.

Verknüpfungen 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.

Note

Eine Verknüpfung mit den Daten im Legacy-Metastore von Hive funktioniert nur im 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 in den Unity-Katalog innerhalb eines vorhandenen Arbeitsbereichs wechseln, ist es sinnvoll, als Standardkatalog zu verwenden hive_metastore , um auswirkungen auf vorhandenen Code zu vermeiden, der auf den Hive-Metastore verweist, es sei denn, Sie haben vollständig aus dem Hive-Metaspeicher migriert.

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.

Siehe Herstellen einer Verbindung mit Azure Data Lake Storage und Blob Storage.

Deaktivieren des Hive-Metastorezugriffs nach der Migration

Nachdem Sie Ihre Tabellen zum Unity-Katalog migriert haben, empfiehlt Databricks die explizite Deaktivierung des direkten Zugriffs auf den Hive-Metaspeicher. Standardmäßig stellen Azure Databricks-Computecluster auch nach der Migration weiterhin eine Verbindung mit dem Hive-Metastore her, es sei denn, Sie deaktivieren den Hive-Metastorezugriff explizit.

Sie können den direkten Zugriff auf den Hive-Metaspeicher im gesamten Arbeitsbereich oder einzeln pro Computecluster deaktivieren. Siehe Deaktivieren des Zugriffs auf den Hive-Metastore, der von Ihrem Azure Databricks-Arbeitsbereich verwendet wird.