Share via


Werken met de Unity-catalogus en de verouderde Hive-metastore

In dit artikel wordt uitgelegd hoe u de Hive-metastore per werkruimte gebruikt wanneer uw Azure Databricks-werkruimte is ingeschakeld voor Unity Catalog.

Als uw werkruimte in service was voordat deze was ingeschakeld voor Unity Catalog, heeft deze waarschijnlijk een Hive-metastore met gegevens die u wilt blijven gebruiken. Databricks raadt u aan om de tabellen die worden beheerd door de Hive-metastore te migreren naar de Unity Catalog-metastore, maar als u dit niet wilt, wordt in dit artikel uitgelegd hoe u kunt werken met gegevens die worden beheerd door beide metastores.

Query's uitvoeren op de Hive-metastore in Unity Catalog

De Unity Catalog-metastore is additief, wat betekent dat deze kan worden gebruikt met de Hive-metastore per werkruimte in Azure Databricks. De Hive-metastore wordt weergegeven als een catalogus op het hoogste niveau die wordt aangeroepen hive_metastore in de naamruimte met drie niveaus.

U kunt bijvoorbeeld verwijzen naar een tabel die is aangeroepen sales_raw in het sales schema in de verouderde Hive-metastore met behulp van de volgende notatie:

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"))

U kunt ook de catalogus en het schema opgeven met een USE instructie:

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"))

Toegangsbeheer in Unity Catalog en de Hive-metastore

Als u toegangsbeheer voor tabellen hebt geconfigureerd in de Hive-metastore, blijft Databricks deze toegangsbeheer voor gegevens in de hive_metastore catalogus afdwingen voor clusters die worden uitgevoerd in de modus voor gedeelde toegang. Het Toegangsmodel van Unity Catalog verschilt enigszins van verouderde toegangsbeheer, zoals geen DENY instructies. De Hive-metastore is een object op werkruimteniveau. Machtigingen die in de hive_metastore catalogus zijn gedefinieerd, verwijzen altijd naar de lokale gebruikers en groepen in de werkruimte. Zie Verschillen tussen toegangsbeheer voor tabellen.

Verschillen met toegangsbeheer voor tabellen

Unity Catalog heeft de volgende belangrijke verschillen van het gebruik van besturingselementen voor tabeltoegang in de verouderde Hive-metastore in elke werkruimte.

Het toegangsbeheermodel in Unity Catalog heeft de volgende verschillen van toegangsbeheer voor tabellen:

  • Accountgroepen: toegangsbeheerbeleid in Unity Catalog wordt toegepast op accountgroepen, terwijl het toegangsbeheerbeleid voor de Hive-metastore wordt toegepast op groepen in de werkruimte. Zie Verschil tussen accountgroepen en werkruimte-lokale groepen.
  • USE CATALOG en USE SCHEMA machtigingen zijn vereist voor de catalogus en het schema voor alle bewerkingen op objecten in de catalogus of het schema: ongeacht de bevoegdheden van een principal voor een tabel, moet de principal ook de bevoegdheid hebben voor de USE CATALOG bovenliggende catalogus om toegang te krijgen tot het schema en de USE SCHEMA bevoegdheid voor toegang tot objecten binnen het schema. Daarentegen, met toegangsbeheer voor tabellen op werkruimteniveau wordt door het verlenen van USAGE voor de rootcatalogus automatisch USAGE toegekend aan alle databases, maar USAGE op de rootcatalogus is niet vereist.
  • Weergaven: In Unity Catalog hoeft de eigenaar van een weergave geen eigenaar te zijn van de tabellen en weergaven waarnaar wordt verwezen. Het hebben van de SELECT bevoegdheid is voldoende, samen met USE SCHEMA het bovenliggende schema van de weergaven en USE CATALOG in de bovenliggende catalogus. Met toegangsbeheer voor tabellen op werkruimteniveau moet de eigenaar van een weergave eigenaar zijn van alle tabellen en weergaven waarnaar wordt verwezen.
  • Er is geen ondersteuning voor ANY FILE ofANONYMOUS FUNCTION: In Unity Catalog is er geen concept van een ANY FILE of ANONYMOUS FUNCTION beveiligbaar waardoor een onbevoegde gebruiker bevoegde code kan uitvoeren.
  • Geen READ_METADATA bevoegdheden: Unity Catalog beheert de toegang om metagegevens op een andere manier weer te geven. Zie Unity Catalog-bevoegdheden en beveiligbare objecten.

Joins tussen Unity Catalog en Hive-metastore-objecten

Met behulp van de notatie voor naamruimten op drie niveaus kunt u gegevens samenvoegen in een Unity Catalog-metastore met gegevens in de verouderde Hive-metastore.

Notitie

Een join met gegevens in de verouderde Hive-metastore werkt alleen in de werkruimte waarin die gegevens zich bevinden. Als u een dergelijke join probeert uit te voeren in een andere werkruimte, treedt er een fout op. Azure Databricks raadt u aan oudere tabellen en weergaven bij te werken naar Unity Catalog.

In het volgende voorbeeld worden resultaten uit de sales_current tabel in de verouderde Hive-metastore samengevoegd met de tabel in de sales_historical Unity Catalog-metastore wanneer de order_id velden gelijk zijn.

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")
))

Standaardcatalogus

Er wordt een standaardcatalogus geconfigureerd voor elke werkruimte die is ingeschakeld voor Unity Catalog.

Als u de naam van de catalogus op het hoogste niveau weglaat wanneer u gegevensbewerkingen uitvoert, wordt ervan uitgegaan dat de standaardcatalogus wordt gebruikt.

De standaardcatalogus die in eerste instantie is geconfigureerd voor uw werkruimte, is afhankelijk van de manier waarop uw werkruimte is ingeschakeld voor Unity Catalog:

  • Als uw werkruimte automatisch is ingeschakeld voor Unity Catalog, is de werkruimtecatalogus ingesteld als de standaardcatalogus. Bekijk Automatisch inschakelen van Unity-catalogus.
  • Als uw werkruimte handmatig is ingeschakeld voor Unity Catalog, is de hive_metastore catalogus ingesteld als de standaardcatalogus.

Als u overstapt van de Hive-metastore naar Unity Catalog binnen een bestaande werkruimte, is het doorgaans zinvol om te gebruiken hive_metastore als de standaardcatalogus om te voorkomen dat bestaande code die verwijst naar de Hive-metastore, wordt beïnvloed.

Zie De standaardcatalogus beheren voor meer informatie over het ophalen en overschakelen van de standaardcatalogus

Machtigingen voor toegang tot gegevens in clusterbereik

Wanneer u de Hive-metastore naast Unity Catalog gebruikt, worden referenties voor gegevenstoegang die aan het cluster zijn gekoppeld, gebruikt om toegang te krijgen tot Hive-metastoregegevens, maar niet tot gegevens die zijn geregistreerd in Unity Catalog.

Als gebruikers toegang krijgen tot paden buiten Unity Catalog (zoals een pad dat niet is geregistreerd als een tabel of externe locatie), worden de toegangsreferenties gebruikt die aan het cluster zijn toegewezen.

Zie Verbinding maken naar Azure Data Lake Storage Gen2 en Blob Storage.

Verouderde tabellen upgraden naar Unity Catalog

Tabellen in de Hive-metastore profiteren niet van de volledige set beveiligings- en governancefuncties die unity catalog introduceert, zoals ingebouwde controle en toegangsbeheer. Databricks raadt u aan uw verouderde tabellen bij te werken door ze toe te voegen aan Unity Catalog.