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
undUSE 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 dieUSE CATALOG
-Berechtigung für seinen übergeordneten Katalog für den Zugriff auf das Schema und dieUSE SCHEMA
-Berechtigung für den Zugriff auf Objekte innerhalb des Schemas verfügen. Bei Tabellenzugriffssteuerungen auf Arbeitsbereichsebene führt das Erteilen vonUSAGE
für den Stammkatalog andererseits automatisch dazu, dassUSAGE
für alle Datenbanken erteilt wird. Die BerechtigungUSAGE
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 mitUSE SCHEMA
für das übergeordnete Schema der Ansichten undUSE 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
oderANONYMOUS FUNCTION
: Im Unity-Katalog gibt es kein Konzept einesANY FILE
oderANONYMOUS 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.