Dela via


Arbeta med Unity Catalog och det äldre Hive-metaarkivet

Den här artikeln förklarar en metod för att fortsätta använda Hive-metaarkivet per arbetsyta när din Azure Databricks-arbetsyta är aktiverad för Unity Catalog.

Om din arbetsyta var i tjänst innan den aktiverades för Unity Catalog har den förmodligen ett inbyggt Hive-metaarkiv som innehåller data som du vill fortsätta att använda. Databricks rekommenderar att du använder Hive Metastore-federation för att skapa en federerad katalog i Unity Catalog som speglar Hive-metaarkivet och så småningom migrerar alla dina äldre arbetsbelastningar för att använda den federerade katalogen. Men om du ännu inte har startat Hive-metaarkivfederationsprocessen kan du använda den här artikeln för att lära dig hur du arbetar med data som är registrerade i ditt äldre Hive-metaarkiv tillsammans med dina data som är registrerade i Unity Catalog.

Fråga Hive-metaarkivet i Unity Catalog

Unity Catalog-metaarkivet är additivt, vilket innebär att det kan användas med Hive-metaarkivet per arbetsyta i Azure Databricks. Hive-metaarkivet visas som en toppnivåkatalog med namnet hive_metastore i ett tre-nivåers namnområde.

Du kan till exempel referera till en tabell med namnet sales_raw i sales-schemat i det äldre Hive-metaarkivet med hjälp av följande notation:

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

Du kan också ange katalogen och schemat med en USE-instruktion:

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

Åtkomstkontroll i Unity Catalog och Hive-metaarkivet

Om du har konfigurerat äldre tabellåtkomstkontroll i Hive-metaarkivet fortsätter Databricks att framtvinga dessa åtkomstkontroller för data i hive_metastore-katalogen för kluster som körs i läget för delad åtkomst. Unity Catalog-åtkomstmodellen skiljer sig något från äldre åtkomstkontroller, som inga DENY-instruktioner. Hive-metaarkivet är ett objekt på arbetsytenivå. Behörigheter som definierats i hive_metastore katalog refererar alltid till lokala användare och grupper på arbetsytan. Se den behörighetsmodell för Unity Catalog som jämförs med äldre tabellåtkomstkontroll.

Behörighetsmodellen för Unity-katalogen jämfört med äldre tabellåtkomstkontroll

Åtkomstkontrollmodellen i Unity Catalog skiljer sig på följande sätt från tabellåtkomstkontroll i det äldre Hive-metaarkivet:

  • Kontogrupper: Åtkomstkontrollprinciper i Unity Catalog tillämpas på kontogrupper, medan åtkomstkontrollprinciper för Hive-metaarkivet tillämpas på arbetsytelokala grupper. Se typer av grupper i Azure Databricks.
  • USE CATALOG och USE SCHEMA behörigheter krävs i katalogen och schemat för alla åtgärder på objekt i katalogen eller schemat: Oavsett en principens behörigheter på en tabell måste principen också ha USE CATALOG behörighet i den överordnade katalogen för att få åtkomst till schemat och USE SCHEMA behörighet att komma åt objekt i schemat. Med åtkomstkontroller på arbetsytenivå ger beviljande av USAGE i rotkatalogen automatiskt USAGE på alla databaser, men USAGE i rotkatalogen krävs inte.
  • Vyer: I Unity Catalog behöver ägaren av en vy inte vara ägare av de tabeller och vyer som vyn refererar till. Att ha SELECT behörighet räcker, tillsammans med USE SCHEMA på vyernas överordnade schema och USE CATALOG på den överordnade katalogen. Med åtkomstkontroller på arbetsytanivå måste en ägare av en vy vara ägare till alla refererade tabeller och vyer.
  • Inget stöd för ANY FILE eller ANONYMOUS FUNCTION: I Unity Catalog finns det inget begrepp för en ANY FILE eller ANONYMOUS FUNCTION som kan göra det möjligt för en icke privilegierad användare att köra privilegierad kod.
  • Ingen READ_METADATA behörighet: Unity Catalog hanterar åtkomst för att visa metadata på ett annat sätt. Se Behörigheter och skyddsbara objekt i Unity-katalogen.

Kopplingar mellan Unity Catalog- och Hive-metaarkivobjekt

Genom att använda notering på tre nivåer kan du koppla data i ett Unity Catalog-metaarkiv med data i det äldre Hive-metaarkivet.

Kommentar

En koppling med data i det äldre Hive-metaarkivet fungerar bara på arbetsytan där dessa data finns. Om du försöker köra en sådan koppling i en annan arbetsyta uppstår ett fel. Azure Databricks rekommenderar att du uppgradera äldre tabeller och vyer till Unity Catalog.

I följande exempel kopplas resultat från tabellen sales_current i det äldre Hive-metaarkivet med sales_historical-tabellen i Unity Catalog-metaarkivet när fälten order_id är lika.

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

En standardkatalog konfigureras för varje arbetsyta som är aktiverad för Unity Catalog.

Om du utelämnar katalognamnet på den översta nivån när du utför dataåtgärder antas standardkatalogen.

Standardkatalogen som ursprungligen konfigurerades för din arbetsyta beror på hur din arbetsyta har aktiverats för Unity Catalog:

  • Om din arbetsyta aktiverades automatiskt för Unity Catalog angavs den arbetsytekatalogen som standardkatalog. Se Automatisk aktivering av Unity Catalog.
  • Om din arbetsyta har aktiverats för Unity Catalog manuellt angavs hive_metastore katalog som standardkatalog.

Om du övergår från Hive-metaarkivet till Unity Catalog på en befintlig arbetsyta är det klokt att använda hive_metastore som standardkatalog för att undvika att påverka befintlig kod som refererar till hive-metaarkivet om du inte har migrerat hive-metaarkivet helt.

Information om hur du hämtar och växlar standardkatalogen finns i Hantera standardkatalogen

Behörigheter för klusteromfattande dataåtkomst

När du använder Hive-metaarkivet tillsammans med Unity Catalog används autentiseringsuppgifter för dataåtkomst som är associerade med klustret för att komma åt Hive-metaarkivdata men inte data som registrerats i Unity Catalog.

Om användarna kommer åt sökvägar som ligger utanför Unity Catalog (till exempel en sökväg som inte har registrerats som en tabell eller extern plats) används de åtkomstautentiseringsuppgifter som tilldelats klustret.

Se Ansluta till Azure Data Lake Storage Gen2 och Blob Storage.

Uppgradera äldre tabeller till Unity Catalog

Tabeller i Hive-metaarkivet drar inte nytta av den fullständiga uppsättningen säkerhets- och styrningsfunktioner som Unity Catalog introducerar, till exempel inbyggd granskning, ursprung och åtkomstkontroll. Databricks rekommenderar att du använder Hive Metastore-federation för att migrera dina data som är registrerade i Hive-metaarkivet till Unity Catalog eller för att uppgradera dina äldre tabeller direkt genom att lägga till dem i Unity Catalog.