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
iUSE 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 iUSE SCHEMA
uprawnienia dostępu do obiektów w schemacie. Z drugiej strony w przypadku kontroli dostępu do tabeli na poziomie obszaru roboczego przyznawanieUSAGE
w katalogu głównym automatycznie przyznajeUSAGE
we wszystkich bazach danych, aleUSAGE
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 zeUSE SCHEMA
schematem nadrzędnym widoków iUSE 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
lubANONYMOUS FUNCTION
: W wykazie aparatu Unity nie ma pojęciaANY FILE
aniANONYMOUS 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.