Udostępnij za pośrednictwem


Praca ze starszym magazynem metadanych Hive w połączeniu z Unity Catalog

W tym artykule wyjaśniono jedno z podejść do kontynuowania używania starszego metastore Hive dla poszczególnych obszarów roboczych, gdy obszar roboczy usługi Azure Databricks jest włączony z Unity Catalog.

Jeśli obszar roboczy był już używany, zanim został włączony dla Unity Catalog, prawdopodobnie ma on magazyn metadanych Hive, zawierający dane, które możesz chcieć dalej wykorzystywać. W tym artykule opisano, jak kontynuować pracę z tabelami zarejestrowanymi w magazynie metadanych Hive.

Ważne

Magazyn metadanych Hive dla każdego obszaru roboczego jest starszą funkcją, a instrukcje podane w tym artykule reprezentują starsze przepływy pracy.

Tabele w metasklepie Hive nie korzystają z pełnego zakresu funkcji bezpieczeństwa i zarządzania oferowanych przez Unity Catalog, takich jak wbudowane audyty, linie pochodzenia i kontrola dostępu. Usługa Databricks zaleca migrowanie tabel oraz obciążeń powiązanych z nimi do Unity Catalogu oraz wyłączenie bezpośredniego dostępu do magazynu metadanych Hive.

Dostępne są dwie ścieżki migracji:

  • Uaktualnij wszystkie tabele zarejestrowane w magazynie metadanych Hive do Unity Catalog.

  • Sfederuj magazyn metadanych Hive z Unity Catalog przy użyciu federacji magazynu metadanych Hive, aby uzyskać bardziej stopniowe podejście. Federacja metastore Hive tworzy obcy katalog w Unity Catalog, który odzwierciedla metastore Hive.

Zobacz Jak zaktualizować obszary robocze Azure Databricks do Unity Catalog.

Wykonywanie zapytań względem starszego magazynu metadanych Hive w Unity Catalog.

Repozytorium metadanych Unity Catalog jest adytatywne, co oznacza, że może być używane z magazynem metadanych Hive dla każdego obszaru roboczego w usłudze Azure Databricks. Magazyn metadanych Hive jest wyświetlany jako katalog najwyższego poziomu o nazwie hive_metastore w trópoziomowej przestrzeni nazw.

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

SQL

SELECT * from hive_metastore.sales.sales_raw;

Pyton

display(spark.table("hive_metastore.sales.sales_raw"))

R

library(SparkR)

display(tableToDF("hive_metastore.sales.sales_raw"))

Skala

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;

Pyton

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

R

library(SparkR)

sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))

Skala

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

Kontrola dostępu w Unity Catalog w porównaniu ze starszym metastore Hive

Jeśli skonfigurowano starszą kontrolę dostępu do tabel w magazynie metadanych Hive, usługa Databricks będzie nadal wymuszać te mechanizmy kontroli dostępu dla danych w hive_metastore wykazie dla klastrów działających w trybie dostępu standardowego.

Model dostępu do wykazu aparatu Unity różni się nieco od starszych kontroli dostępu:

  • pl-PL: Metastore: Unity Catalog jest obiektem na poziomie konta, a Hive metastore jest obiektem na poziomie obszaru roboczego. Uprawnienia zdefiniowane w katalogu hive_metastore zawsze odwołują się do lokalnych użytkowników i grup w obszarze roboczym.
  • Grupy kont: Zasady kontroli dostępu w 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ódła grup.
  • 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 kolei w przypadku kontroli dostępu do tabeli na poziomie obszaru roboczego przyznanie USAGE w katalogu głównym automatycznie przyznaje USAGE we wszystkich bazach danych, ale USAGE w katalogu głównym nie jest wymagane.
  • Widoki: W Unity Catalog właściciel widoku nie musi być właścicielem przywołanych tabel i widoków. Posiadanie uprawnienia SELECT jest wystarczające, wraz z USE SCHEMA na schemacie nadrzędnych widoków i USE CATALOG na wykazie nadrzędnym. W przypadku kontroli dostępu do tabel na poziomie obszaru roboczego właściciel widoku musi być właścicielem wszystkich przywołynych tabel i widoków.
  • Brak obsługi ANY FILE lub ANONYMOUS FUNCTION: W katalogu Unity nie istnieje pojęcie zabezpieczeń typu ANY FILE ani ANONYMOUS FUNCTION, które mogłyby pozwolić użytkownikowi bez uprawnień na uruchomienie kodu uprzywilejowanego.
  • Brak obsługi dla DENY: Model uprawnień Unity Catalog jest oparty na zasadzie najmniejszych uprzywilejowań. Uprawnienia, które nie zostały przyznane, są niejawnie odrzucane.
  • Brak READ_METADATA uprawnień: Unity Catalog zarządza dostępem do metadanych w inny sposób. Zobacz Uprawnienia katalogu Unity i obiekty do zabezpieczenia.

Połączenia między katalogiem Unity a obiektami metastore Hive

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

Uwaga

Połączenie z danymi w starszym metastore Hive będzie działać tylko w obszarze roboczym, w którym znajdują się te dane. Próba uruchomienia takiego złączenia w innym obszarze roboczym skutkuje błędem. Usługa Azure Databricks zaleca aktualizację starszych tabel i widoków do Unity Catalog.

Poniższy przykład łączy wyniki z tabeli sales_current w starszym metastore Hive z tabelą sales_historical w katalogu Unity, gdy pola order_id 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;

Pyton

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

Skala

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 katalog jest konfigurowany dla każdego obszaru roboczego z włączonym katalogiem Unity.

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

Domyślny katalog, który został początkowo skonfigurowany dla Twojego obszaru roboczego, zależy od metody włączania obszaru roboczego do Unity Catalog.

  • Jeśli obszar roboczy został automatycznie włączony dla katalogu Unity, katalog obszaru roboczego został ustawiony jako domyślny katalog. Zobacz Automatyczne włączanie Unity Catalog.
  • Jeśli obszar roboczy został włączony ręcznie dla Unity Catalog, katalog hive_metastore został ustawiony jako katalog domyślny.

Jeśli przechodzisz z Hive metastore do Unity Catalog 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 Hive metastore, chyba że całkowicie z niego zrezygnowałeś.

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

Uprawnienia dostępu do danych na poziomie klastra

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

Jeśli użytkownicy mają dostęp do ścieżek spoza Unity Catalog (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 i usługą Blob Storage.