Lavorare con Unity Catalog e il metastore Hive legacy
Questo articolo illustra come usare il metastore Hive per area di lavoro quando l'area di lavoro di Azure Databricks è abilitata per Unity Catalog.
Se l'area di lavoro era nel servizio prima che fosse abilitata per Unity Catalog, è probabile che abbia un metastore Hive che contiene dati che si desidera continuare a usare. Databricks consiglia di eseguire la migrazione delle tabelle gestite dal metastore Hive al metastore di Unity Catalog, ma se si sceglie di non farlo, questo articolo illustra come usare i dati gestiti da entrambi i metastore.
Eseguire una query sul metastore Hive nel catalogo unity
Il metastore del catalogo Unity è aggiuntivo, ovvero può essere usato con il metastore Hive per area di lavoro in Azure Databricks. Il metastore Hive viene visualizzato come catalogo di primo livello denominato hive_metastore
nello spazio dei nomi a tre livelli.
Ad esempio, è possibile fare riferimento a una tabella denominata sales_raw
nello sales
schema nel metastore Hive legacy usando la notazione seguente:
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"))
È anche possibile specificare il catalogo e lo schema con un'istruzione 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"))
Controllo di accesso nel catalogo unity e nel metastore Hive
Se è stato configurato il controllo di accesso alle tabelle nel metastore Hive, Databricks continua a applicare tali controlli di accesso per i dati nel hive_metastore
catalogo per i cluster in esecuzione nella modalità di accesso condiviso. Il modello di accesso al catalogo Unity differisce leggermente dai controlli di accesso legacy, ad esempio nessuna DENY
istruzione. Il metastore Hive è un oggetto a livello di area di lavoro. Le autorizzazioni definite all'interno del hive_metastore
catalogo fanno sempre riferimento agli utenti e ai gruppi locali nell'area di lavoro. Vedere Differenze rispetto al controllo di accesso alle tabelle.
Differenze rispetto al controllo di accesso alle tabelle
Il catalogo unity presenta le differenze principali seguenti rispetto all'uso dei controlli di accesso alle tabelle nel metastore Hive legacy in ogni area di lavoro.
Il modello di controllo di accesso in Unity Catalog presenta le differenze seguenti rispetto al controllo di accesso alle tabelle:
- Gruppi di account: i criteri di controllo di accesso nel catalogo Unity vengono applicati ai gruppi di account, mentre i criteri di controllo di accesso per il metastore Hive vengono applicati ai gruppi locali dell'area di lavoro. Vedere Differenza tra gruppi di account e gruppi locali dell'area di lavoro.
USE CATALOG
Le autorizzazioni eUSE SCHEMA
sono necessarie per il catalogo e lo schema per tutte le operazioni sugli oggetti all'interno del catalogo o dello schema: indipendentemente dai privilegi di un'entità in una tabella, l'entità deve avere anche il privilegio per ilUSE CATALOG
catalogo padre di accedere allo schema e alUSE SCHEMA
privilegio di accedere agli oggetti all'interno dello schema. Con i controlli di accesso alle tabelle a livello di area di lavoro, d'altra parte, la concessioneUSAGE
sul catalogo principale concedeUSAGE
automaticamente su tutti i database, maUSAGE
sul catalogo principale non è necessaria.- Viste: nel catalogo Unity il proprietario di una vista non deve essere un proprietario delle tabelle e delle viste a cui fa riferimento la vista. Avere il
SELECT
privilegio è sufficiente, insiemeUSE SCHEMA
allo schema padre delle viste eUSE CATALOG
al catalogo padre. Con i controlli di accesso alla tabella a livello di area di lavoro, il proprietario di una vista deve essere proprietario di tutte le tabelle e le viste a cui si fa riferimento. - Nessun supporto per
ANY FILE
oANONYMOUS FUNCTION
: in Unity Catalog non esiste alcun concetto diANY FILE
entità a protezione diretta oANONYMOUS FUNCTION
che potrebbe consentire a un utente senza privilegi di eseguire codice con privilegi. - Nessun
READ_METADATA
privilegio: Il catalogo unity gestisce l'accesso per visualizzare i metadati in modo diverso. Vedere Privilegi del catalogo Unity e oggetti a protezione diretta.
Join tra oggetti del metastore Unity e Hive
Usando la notazione dello spazio dei nomi a tre livelli, è possibile unire i dati in un metastore di Unity Catalog con i dati nel metastore Hive legacy.
Nota
Un join con i dati nel metastore Hive legacy funzionerà solo nell'area di lavoro in cui risiedono i dati. Il tentativo di eseguire un join di questo tipo in un'altra area di lavoro genera un errore. Azure Databricks consiglia di aggiornare tabelle e viste legacy a Unity Catalog.
L'esempio seguente unisce i risultati della sales_current
tabella nel metastore Hive legacy con la sales_historical
tabella nel metastore del catalogo Unity quando i order_id
campi sono uguali.
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")
))
Catalogo predefinito
Per ogni area di lavoro abilitata per Il catalogo Unity è configurato un catalogo predefinito.
Se si omette il nome del catalogo di primo livello quando si eseguono operazioni sui dati, viene utilizzato il catalogo predefinito.
Il catalogo predefinito configurato inizialmente per l'area di lavoro dipende dal modo in cui l'area di lavoro è stata abilitata per il catalogo Unity:
- Se l'area di lavoro è stata abilitata automaticamente per Unity Catalog, il catalogo dell'area di lavoro è stato impostato come catalogo predefinito. Vedere Abilitazione automatica del catalogo Unity.
- Se l'area di lavoro è stata abilitata manualmente per Unity Catalog, il
hive_metastore
catalogo è stato impostato come catalogo predefinito.
Se si esegue la transizione dal metastore Hive al catalogo Unity all'interno di un'area di lavoro esistente, in genere è opportuno usare hive_metastore
come catalogo predefinito per evitare di influire sul codice esistente che fa riferimento al metastore hive.
Per informazioni su come ottenere e cambiare il catalogo predefinito, vedere Gestire il catalogo predefinito
Autorizzazioni di accesso ai dati con ambito cluster
Quando si usa il metastore Hive insieme a Unity Catalog, le credenziali di accesso ai dati associate al cluster vengono usate per accedere ai dati del metastore Hive, ma non ai dati registrati in Unity Catalog.
Se gli utenti accedono ai percorsi esterni a Unity Catalog ,ad esempio un percorso non registrato come tabella o posizione esterna, vengono usate le credenziali di accesso assegnate al cluster.
Vedere Connessione ad Azure Data Lake Archiviazione Gen2 e Archiviazione BLOB.
Aggiornare le tabelle legacy a Unity Catalog
Le tabelle nel metastore Hive non traggono vantaggio dal set completo di funzionalità di sicurezza e governance introdotte da Unity Catalog, ad esempio il controllo predefinito e il controllo di accesso. Databricks consiglia di aggiornare le tabelle legacy aggiungendole al catalogo Unity.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per