Werken met de Unity-catalogus en de verouderde Hive-metastore
In dit artikel wordt uitgelegd hoe u de Hive-metastore per werkruimte kunt blijven gebruiken 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 ingebouwde Hive-metastore die gegevens bevat die u wilt blijven gebruiken. Databricks raadt u aan om Hive Metastore-federatie te gebruiken om een federatieve catalogus te maken in Unity Catalog die de Hive-metastore spiegelt en uiteindelijk al uw verouderde workloads migreert om die federatieve catalogus te gebruiken. Als u het Hive-metastore-federatieproces nog niet hebt gestart, kunt u dit artikel gebruiken om te leren hoe u kunt werken met gegevens die zijn geregistreerd in uw verouderde Hive-metastore naast uw gegevens die zijn geregistreerd in Unity Catalog.
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 verouderd toegangsbeheer voor tabellen hebt geconfigureerd in de Hive-metastore, blijft Databricks deze toegangsregels afdwingen voor gegevens in de hive_metastore
-catalogus voor clusters die in de gedeelde toegangsmode draaien. 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 Het privilegemodel voor Unity Catalog vergeleken met verouderde toegangsbeheer voor tabellen.
Het privilegemodel van De Unity-catalogus vergeleken met het verouderde toegangsbeheer voor tabellen
Het toegangsbeheermodel in Unity Catalog verschilt op de volgende manieren van toegangsbeheer voor tabellen in de verouderde Hive-metastore:
- Accountgroepen: toegangsbeheerbeleid in Unity Catalog wordt toegepast op accountgroepen, terwijl het toegangsbeheerbeleid voor de Hive-metastore wordt toegepast op groepen in de werkruimte. Zie Typen groepen in Azure Databricks.
-
USE CATALOG
enUSE 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 deUSE CATALOG
bovenliggende catalogus om toegang te krijgen tot het schema en deUSE SCHEMA
bevoegdheid voor toegang tot objecten binnen het schema. Daarentegen, met toegangsbeheer voor tabellen op werkruimteniveau wordt door het verlenen vanUSAGE
voor de rootcatalogus automatischUSAGE
toegekend aan alle databases, maarUSAGE
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 metUSE SCHEMA
het bovenliggende schema van de weergaven enUSE 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. -
ANY FILE
ANONYMOUS FUNCTION
: In Unity Catalog is er geen concept van een ofANY FILE
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 zinvol om hive_metastore
te gebruiken als de standaardcatalogus om te voorkomen dat bestaande code wordt beïnvloed die verwijst naar de Hive-metastore, tenzij u volledig hebt gemigreerd uit Hive-metastore.
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 met 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, herkomst en toegangsbeheer. Databricks raadt u aan om Hive Metastore-federatie te gebruiken om uw gegevens die zijn geregistreerd in de Hive-metastore te migreren naar Unity Catalog, of om uw verouderde tabellen rechtstreeks te upgraden door ze toe te voegen aan Unity Catalog.