Condividi tramite


Collaborare con Unity Catalog e il metastore Hive legacy

Questo articolo illustra un approccio per continuare a utilizzare il metastore Hive specifico per area di lavoro quando lo spazio di lavoro di Azure Databricks è abilitato per Unity Catalog.

Se l'area di lavoro era nel servizio prima che fosse abilitata per Unity Catalog, è probabile che abbia un metastore Hive predefinito che contiene dati che si desidera continuare a usare. Databricks consiglia di usare federazione metastore Hive per creare un catalogo esterno in Unity Catalog che rispecchia il metastore Hive ed eventualmente eseguire la migrazione di tutti i carichi di lavoro legacy per usare tale catalogo esterno. Tuttavia, se non è ancora stato avviato il processo di federazione del metastore Hive, è possibile usare questo articolo per informazioni su come usare i dati registrati nel metastore Hive legacy insieme ai dati registrati in Unity Catalog.

Eseguire una query sul metastore Hive nel catalogo Unity

Il metastore di Unity Catalog è di tipo additivo, il che significa che può essere utilizzato insieme al metastore Hive per area di lavoro su 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 controllo di accesso alla tabella legacy nel metastore Hive, Databricks continua a applicare tali controlli di accesso per i dati nel catalogo hive_metastore per i cluster in esecuzione nella modalità di accesso standard. 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 Il modello di privilegi del catalogo Unity rispetto al controllo di accesso alle tabelle legacy.

Il modello di privilegi del catalogo Unity rispetto al controllo di accesso alle tabelle legacy

Il modello di controllo di accesso in Unity Catalog si differenzia nei seguenti modi rispetto al controllo degli accessi alle tabelle nel metastore Hive legacy:

  • 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. Vedi Tipi di gruppi in Azure Databricks.
  • Le autorizzazioni USE CATALOG e USE SCHEMA sono necessarie sul catalogo e sullo schema per tutte le operazioni sugli oggetti all'interno del catalogo o dello schema: indipendentemente dai privilegi di un utente su una tabella, l'utente deve anche avere il privilegio USE CATALOG sul catalogo principale per accedere allo schema e il privilegio USE SCHEMA per accedere agli oggetti all'interno dello schema. Con i controlli di accesso alle tabelle a livello di area di lavoro, d'altra parte, la concessione USAGE sul catalogo principale concede USAGE automaticamente su tutti i database, ma USAGE 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, insieme a USE SCHEMA allo schema padre delle viste e USE CATALOG al catalogo padre. Con i controlli di accesso alla tabella a livello di workspace, il proprietario di una view deve essere proprietario di tutte le tabelle e le viste a cui si fa riferimento.
  • Nessun supporto per ANY FILE o ANONYMOUS FUNCTION: In Unity Catalog, non esiste alcun concetto di ANY FILE o ANONYMOUS FUNCTION securable che potrebbe consentire a un utente senza privilegi di eseguire codice privilegiato.
  • Nessun READ_METADATA privilegio: Il catalogo unity gestisce l'accesso per visualizzare i metadati in modo diverso. Vedere i privilegi e gli oggetti proteggibili di Unity Catalog.

Unioni tra oggetti del Catalogo Unity e del metastore 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'operazione di join con i dati nel metastore Hive legacy funzionerà solo sull'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 tabella sales_current nel metastore Hive legacy con la tabella sales_historical nel metastore Unity Catalog se i campi order_id 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. Consultare Abilitazione automatica di Unity Catalog.
  • 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, è opportuno usare hive_metastore come catalogo predefinito per evitare di influire sul codice esistente che fa riferimento al metastore Hive, a meno che non si sia completamente migrati dal 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.

Consulta Connettersi a Azure Data Lake Storage Gen2 e Blob Storage.

Aggiornare delle tabelle esistenti a Unity Catalog

Le tabelle nel metastore Hive non traggono vantaggio dal set completo di funzionalità di sicurezza e governance introdotte da Unity Catalog, come l'audit integrato, la tracciabilità e il controllo degli accessi. Databricks consiglia di usare la federazione del metastore Hive per migrare i dati registrati nel metastore Hive nel Catalogo Unity, o per aggiornare le tabelle legacy direttamente aggiungendole al Catalogo Unity.