Udostępnij za pośrednictwem


Praca z rozwiązaniem Unity Catalog i starszym magazynem metadanych Hive

W tym artykule wyjaśniono jedno podejście do dalszego używania magazynu metadanych Hive dla poszczególnych obszarów roboczych, gdy obszar roboczy usługi Azure Databricks ma włączony Unity Catalog.

Jeśli obszar roboczy był używany, zanim został włączony dla katalogu Unity, prawdopodobnie ma wbudowany magazyn metadanych Hive zawierający dane, które chcesz nadal wykorzystywać. Usługa Databricks zaleca użycie federacji metastore Hive do stworzenia katalogu federacyjnego w Unity Catalog, który odzwierciedla metastore Hive i docelowo dokonanie migracji wszystkich starszych obciążeń do korzystania z tego katalogu federacyjnego. Jeśli jednak nie rozpocząłeś jeszcze procesu federacyjnego metastore Hive, możesz użyć tego artykułu, aby dowiedzieć się, jak pracować z danymi zarejestrowanymi w starszym metastore Hive wraz z danymi zarejestrowanymi w Unity Catalog.

Wykonywanie zapytań względem magazynu metadanych Hive w wykazie aparatu Unity

Magazyn metadanych wykazu aparatu Unity jest addytywne, co oznacza, że może być używany z magazynem metadanych Hive dla poszczególnych obszarów roboczych w usłudze Azure Databricks. Magazyn metadanych Hive jest wyświetlany jako katalog najwyższego poziomu o nazwie hive_metastore w przestrzeni nazw trzy-poziomowej.

Na przykład można odwołać się do tabeli o nazwie sales_raw w sales schemacie w starszym magazynie metadanych Hive, korzystając z następującej notacji:

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

Można również określić wykaz i schemat za pomocą instrukcji USE :

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

Kontrola dostępu w wykazie aparatu Unity i magazynie metadanych Programu Hive

Jeśli skonfigurowano starszej wersji kontroli dostępu do tabel w magazynie metadanych Hive, usługa Databricks będzie nadal wymuszać te mechanizmy kontroli dostępu dla danych w katalogu hive_metastore dla klastrów działających w trybie dostępu współdzielonego. Model dostępu do wykazu aparatu Unity różni się nieco od starszych mechanizmów kontroli dostępu, takich jak brak DENY instrukcji. Magazyn metadanych Hive jest obiektem na poziomie obszaru roboczego. Uprawnienia zdefiniowane w wykazie hive_metastore zawsze odwołują się do lokalnych użytkowników i grup w obszarze roboczym. Zobacz Model uprawnień Unity Catalog w porównaniu z tradycyjną kontrolą dostępu do tabel.

Model uprawnień Katalogu Unity w porównaniu z dotychczasową kontrolą dostępu do tabel

Model kontroli dostępu w katalogu Unity różni się w następujący sposób od kontroli dostępu do tabel w starszym metamagazynie Hive:

  • Grupy kont: zasady kontroli dostępu w wykazie Unity Catalog są stosowane do grup kont, podczas gdy zasady kontroli dostępu dla magazynu metadanych Hive są stosowane do grup lokalnych obszaru roboczego. Zobacz Różnice między grupami kont i grupami lokalnymi obszaru roboczego.
  • USE CATALOG i USE SCHEMA uprawnienia są wymagane w wykazie i schemacie dla wszystkich operacji na obiektach w wykazie lub schemacie: Niezależnie od uprawnień podmiotu zabezpieczeń w tabeli, podmiot zabezpieczeń musi również mieć USE CATALOG uprawnienia do katalogu nadrzędnego, aby uzyskać dostęp do schematu i USE SCHEMA uprawnienia dostępu do obiektów w schemacie. Z drugiej strony w przypadku kontroli dostępu do tabeli na poziomie obszaru roboczego przyznawanie USAGE w katalogu głównym automatycznie przyznaje USAGE we wszystkich bazach danych, ale USAGE w katalogu głównym nie jest wymagane.
  • Widoki: w wykazie Unity Catalog właściciel widoku nie musi być właścicielem przywoływanych tabel i widoków. SELECT Posiadanie uprawnień jest wystarczające wraz ze USE SCHEMA schematem nadrzędnym widoków i USE CATALOG wykazem nadrzędnym. W przypadku kontroli dostępu do tabel na poziomie obszaru roboczego właściciel widoku musi być właścicielem wszystkich przywoływanych tabel i widoków.
  • Brak obsługi ANY FILE lub ANONYMOUS FUNCTION: W wykazie aparatu Unity nie ma pojęcia ANY FILE ani ANONYMOUS FUNCTION zabezpieczania, które może zezwalać użytkownikowi nieuprzywilejowanemu na uruchamianie uprzywilejowanego kodu.
  • Brak READ_METADATA uprawnień: Wykaz aparatu Unity zarządza dostępem do wyświetlania metadanych w inny sposób. Zobacz Uprawnienia wykazu aparatu Unity i zabezpieczane obiekty.

Sprzężenia między katalogami aparatu Unity i obiektami magazynu metadanych Hive

Korzystając z notacji trójstopniowej przestrzeni nazw, można łączyć dane w magazynie metadanych wykazu aparatu Unity z danymi w starszym magazynie metadanych Programu Hive.

Uwaga

Sprzężenia z danymi w starszym magazynie metadanych Hive będą działać tylko w obszarze roboczym, w którym znajdują się te dane. Próba uruchomienia takiego sprzężenia w innym obszarze roboczym powoduje wystąpienie błędu. Usługa Azure Databricks zaleca uaktualnienie starszych tabel i widoków do wykazu aparatu Unity.

Poniższy przykład łączy wyniki z sales_current tabeli w starszym magazynie metadanych Hive z tabelą sales_historical w magazynie metadanych wykazu aparatu Unity, gdy order_id pola są równe.

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

Katalog domyślny

Domyślny wykaz jest skonfigurowany dla każdego obszaru roboczego, który jest włączony dla wykazu aparatu Unity.

Jeśli pominięto nazwę wykazu najwyższego poziomu podczas wykonywania operacji na danych, przyjmuje się domyślny wykaz.

Domyślny wykaz, który został początkowo skonfigurowany dla obszaru roboczego, zależy od sposobu włączenia obszaru roboczego dla wykazu aparatu Unity:

  • Jeśli obszar roboczy został włączony automatycznie dla wykazu aparatu Unity, wykaz obszarów roboczych został ustawiony jako katalog domyślny. Patrz Automatyczne włączanie wykazu Unity.
  • Jeśli obszar roboczy został włączony ręcznie dla wykazu aparatu Unity, hive_metastore wykaz został ustawiony jako wykaz domyślny.

Jeśli przechodzisz z magazynu metadanych Hive do katalogu Unity w istniejącym obszarze roboczym, warto użyć hive_metastore jako katalogu domyślnego, aby uniknąć wpływu na istniejący kod odwołujący się do magazynu metadanych Hive, chyba że kompletnie zakończyłeś migrację z magazynu metadanych Hive.

Aby dowiedzieć się, jak pobrać i przełączyć katalog domyślny, zobacz Zarządzanie wykazem domyślnym

Uprawnienia dostępu do danych w zakresie klastra

W przypadku korzystania z magazynu metadanych Hive wraz z wykazem aparatu Unity poświadczenia dostępu do danych skojarzone z klastrem są używane do uzyskiwania dostępu do danych magazynu metadanych Hive, ale nie do rejestrowania danych w wykazie aparatu Unity.

Jeśli użytkownicy uzyskują dostęp do ścieżek spoza wykazu aparatu Unity (takich jak ścieżka niezarejestrowana jako tabela lub lokalizacja zewnętrzna), używane są poświadczenia dostępu przypisane do klastra.

Zobacz Nawiązywanie połączenia z usługą Azure Data Lake Storage Gen2 i usługą Blob Storage.

Uaktualnianie starszych tabel do wykazu aparatu Unity

Tabele w magazynie metadanych Hive nie korzystają z pełnego zestawu funkcji zabezpieczeń i ładu, które wprowadza Unity Catalog, takich jak wbudowany audyt, śledzenie pochodzenia i kontrola dostępu. Usługa Databricks zaleca używanie federacji magazynu metadanych Hive do migrowania danych zarejestrowanych w magazynie metadanych Hive do katalogu aparatu Unity lub uaktualniania starszych tabel bezpośrednio przez dodanie ich do wykazu aparatu Unity.