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

W tym artykule wyjaśniono, jak używać magazynu metadanych Hive dla poszczególnych obszarów roboczych, gdy obszar roboczy usługi Azure Databricks jest włączony dla wykazu aparatu Unity.

Jeśli obszar roboczy był w usłudze, zanim został włączony dla wykazu aparatu Unity, prawdopodobnie ma on magazyn metadanych Hive zawierający dane, które chcesz nadal używać. Usługa Databricks zaleca migrowanie tabel zarządzanych przez magazyn metadanych Hive do magazynu metadanych wykazu aparatu Unity, ale jeśli nie chcesz, w tym artykule wyjaśniono, jak pracować z danymi zarządzanymi przez oba magazyny metadanych.

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 kontrolę dostępu do tabel w magazynie metadanych Hive, usługa Databricks nadal wymusza te mechanizmy kontroli dostępu dla danych w hive_metastore wykazie 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 Różnice w kontroli dostępu do tabel.

Różnice w kontroli dostępu do tabel

Katalog aparatu Unity ma następujące kluczowe różnice w korzystaniu z kontrolek dostępu do tabel w starszym magazynie metadanych Hive w każdym obszarze roboczym.

Model kontroli dostępu w katalogu aparatu Unity ma następujące różnice w kontroli dostępu do tabel:

  • 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 wykazu aparatu Unity w istniejącym obszarze roboczym, zazwyczaj warto użyć hive_metastore go jako katalogu domyślnego, aby uniknąć wpływu na istniejący kod odwołujący się do 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 wprowadzono w wykazie aparatu Unity, takich jak wbudowane inspekcje i kontrola dostępu. Usługa Databricks zaleca uaktualnienie starszych tabel przez dodanie ich do wykazu aparatu Unity.