A Unity Catalog és az örökölt Hive-metaadattár használata

Ez a cikk bemutatja, hogyan használhatja a munkaterületenkénti Hive metaadattárat, ha az Azure Databricks-munkaterület engedélyezve van a Unity Catalogban.

Ha a munkaterület még azelőtt volt használatban, hogy engedélyezték volna a Unity Catalogban, valószínűleg van egy Hive-metaadattára, amely a továbbra is használni kívánt adatokat tartalmazza. A Databricks azt javasolja, hogy migrálja a Hive metaadattár által kezelt táblákat a Unity Catalog metaadattárba, de ha ezt nem teszi meg, ez a cikk bemutatja, hogyan dolgozhat mindkét metaadattár által kezelt adatokkal.

A Hive metaadattár lekérdezése a Unity Katalógusban

A Unity Catalog metaadattára additív, ami azt jelenti, hogy az Azure Databricks munkaterületenkénti Hive metaadattárával is használható. A Hive metaadattár a háromszintű névtérben hívott hive_metastore legfelső szintű katalógusként jelenik meg.

Az örökölt Hive metaadattár sémájában sales például sales_raw a következő jelöléssel hivatkozhat egy táblára:

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

A katalógust és a sémát utasítással USE is megadhatja:

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

Hozzáférés-vezérlés a Unity Catalogban és a Hive-metaadattárban

Ha táblahozzáférés-vezérlést konfigurált a Hive metaadattárban, a Databricks továbbra is kikényszeríti ezeket a hozzáférési vezérlőket a katalógusban lévő hive_metastore adatokhoz a megosztott hozzáférési módban futó fürtök esetében. A Unity Catalog hozzáférési modellje kissé eltér az örökölt hozzáférés-vezérlőktől, például nincs DENY utasítás. A Hive metaadattár egy munkaterületszintű objektum. A katalógusban hive_metastore meghatározott engedélyek mindig a munkaterület helyi felhasználóira és csoportjaira vonatkoznak. Lásd a táblahozzáférés-vezérlés különbségeit.

Különbségek a táblahozzáférés-vezérléstől

A Unity Catalog az alábbi főbb különbségeket tartalmazza az örökölt Hive-metaadattár táblahozzáférés-vezérlőinek minden munkaterületen való használatához képest.

A Unity Catalog hozzáférés-vezérlési modellje a következő különbségeket tartalmazza a táblahozzáférés-vezérléstől:

  • Fiókcsoportok: A Unity Catalog hozzáférés-vezérlési szabályzatai a fiókcsoportokra, míg a Hive-metaadattár hozzáférés-vezérlési szabályzatai a munkaterületek helyi csoportjaira vonatkoznak. Lásd a fiókcsoportok és a munkaterület helyi csoportjai közötti különbséget.
  • USE CATALOG és USE SCHEMA engedélyekre van szükség a katalógusban és a sémában a katalóguson vagy sémán belüli objektumokon végzett összes művelethez: Függetlenül attól, hogy az egyszerű jogosultságok egy táblán vannak-e, a rendszerbiztonsági tagnak rendelkeznie kell a USE CATALOG szülőkatalógus jogosultságával a sémához való hozzáféréshez és a USE SCHEMA sémán belüli objektumok eléréséhez szükséges jogosultsággal. A munkaterület szintű tábla-hozzáférésvezérléssel viszont a USAGE megadása a gyökérkatalógusban automatikusan megadja a USAGE címet az összes adatbázisban, de a USAGE címre nincs szükség a gyökérkatalógusban.
  • Nézetek: A Unity Catalogban a nézet tulajdonosának nem kell a nézet hivatkozott tábláinak és nézeteinek tulajdonosának lennie. SELECT A jogosultság megadása a nézetek szülősémán és USE CATALOG a szülőkatalóguson is USE SCHEMA elegendő. A munkaterület-szintű táblahozzáférés-vezérlők esetében a nézet tulajdonosának az összes hivatkozott tábla és nézet tulajdonosának kell lennie.
  • A Unity Katalógusban nincs olyan ANY FILEANONYMOUS FUNCTIONvagy biztonságos fogalom ANY FILEANONYMOUS FUNCTION , amely lehetővé tenné a jogosultsággal nem rendelkező felhasználók számára a kiemelt kód futtatását.
  • Nincs READ_METADATA jogosultság: A Unity Catalog más módon kezeli a metaadatok megtekintéséhez való hozzáférést. Lásd: Unity Catalog-jogosultságok és biztonságos objektumok.

Illesztések a Unity Catalog és a Hive metaadattár-objektumok között

Háromszintű névtér-jelöléssel összekapcsolhatja az adatokat egy Unity Catalog-metaadattárban az örökölt Hive-metaadattár adataival.

Feljegyzés

Az örökölt Hive metaadattárban lévő adatok összekapcsolása csak azon a munkaterületen működik, ahol az adatok találhatók. Ha egy ilyen illesztés futtatása egy másik munkaterületen történik, hibaüzenet jelenik meg. Az Azure Databricks azt javasolja, hogy frissítse az örökölt táblákat és nézeteket a Unity Catalogra.

Az alábbi példa az sales_current örökölt Hive metaadattárban lévő táblából származó eredményeket illeszti össze a sales_historical Unity Katalógus metaadattárában lévő táblával, ha a order_id mezők egyenlőek.

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

Alapértelmezett katalógus

Minden olyan munkaterülethez, amely engedélyezve van a Unity Cataloghoz, egy alapértelmezett katalógus van konfigurálva.

Ha adatműveletek végrehajtásakor kihagyja a legfelső szintű katalógus nevét, a rendszer feltételezi az alapértelmezett katalógust.

A munkaterülethez eredetileg konfigurált alapértelmezett katalógus attól függ, hogy a munkaterület hogyan lett engedélyezve a Unity-katalógusban:

  • Ha a munkaterület automatikusan engedélyezve lett a Unity-katalógushoz, a munkaterület-katalógus alapértelmezett katalógusként lett beállítva. Lásd: A Unity-katalógus automatikus engedélyezése.
  • Ha a munkaterület manuálisan lett engedélyezve a Unity-katalógushoz, a hive_metastore katalógus alapértelmezett katalógusként lett beállítva.

Ha egy meglévő munkaterületen belül a Hive-metaadattárról a Unity-katalógusra vált, általában érdemes alapértelmezett katalógusként használni hive_metastore , hogy ne befolyásolja a hive metaadattárra hivatkozó meglévő kódot.

Az alapértelmezett katalógus beszerzéséről és váltásáról az alapértelmezett katalógus kezelése című témakörben olvashat

Fürt hatókörű adathozzáférési engedélyei

Ha a Hive metaadattárat a Unity Catalog mellett használja, a rendszer a fürthöz társított adathozzáférési hitelesítő adatokat használja a Hive metaadattár adatainak eléréséhez, a Unity Katalógusban regisztrált adatokat azonban nem.

Ha a felhasználók a Unity-katalóguson kívüli elérési utakhoz férnek hozzá (például egy táblaként vagy külső helyként nem regisztrált elérési utat), akkor a rendszer a fürthöz rendelt hozzáférési hitelesítő adatokat használja.

Lásd: Csatlakozás az Azure Data Lake Storage Gen2-be és a Blob Storage-ba.

Régi táblák frissítése a Unity Catalogra

A Hive-metaadattár táblái nem élvezhetik a Unity Catalog által bevezetett biztonsági és szabályozási funkciók teljes készletét, például a beépített naplózást és a hozzáférés-vezérlést. A Databricks azt javasolja, hogy frissítse az örökölt táblákat a Unity Cataloghoz való hozzáadásával.