Leggere i dati condivisi usando Delta Sharing da Databricks a Databricks (per destinatari)
Questo articolo descrive come leggere i dati che sono stati condivisi con voi utilizzando il protocollo di Delta Sharing da Databricks a Databricks, in cui Databricks gestisce una connessione sicura per la condivisione dei dati. A differenza del protocollo di condivisione aperta di Delta Sharing, il protocollo da Databricks a Databricks non richiede un file di credenziali (sicurezza basata su token).
La condivisione da Databricks a Databricks richiede che il destinatario abbia accesso a un'area di lavoro di Databricks abilitata per Unity Catalog.
Se non si dispone di un'area di lavoro di Databricks abilitata per Unity Catalog, i dati devono essere condivisi con l'utente tramite il protocollo di condivisione aperta di Delta Sharing e dunque non è possibile applicare il contenuto di questo articolo. Vedere Leggere i dati condivisi usando la condivisione aperta di Delta Sharing (per i destinatari).
Come fare per rendere disponibili al team i dati condivisi?
Per leggere i dati e i notebook condivisi con l'utente tramite il protocollo da Databricks a Databricks, è necessario essere un utente di un'area di lavoro di Databricks abilitata per Unity Catalog. Un membro del team comunica al fornitore di dati un identificatore univoco per il metastore Unity Catalog e il fornitore di dati utilizza questo identificatore per creare una connessione di condivisione sicura con l'organizzazione. I dati condivisi diventano allora disponibili per l'accesso in lettura nell'area di lavoro e tutti gli aggiornamenti apportati dal fornitore di dati alle tabelle, alle viste, ai volumi e alle partizioni condivise si riversano nell'area di lavoro in tempo quasi reale.
Nota
Gli aggiornamenti alle tabelle, alle viste e ai volumi di dati condivisi vengono visualizzati nell'area di lavoro in tempo quasi reale. Tuttavia, le modifiche alle colonne (aggiunta, ridenominazione, eliminazione) potrebbero non apparire in Esplora cataloghi per un tempo massimo di un minuto. Allo stesso modo, le nuove condivisioni e gli aggiornamenti delle condivisioni (come l'aggiunta di nuove tabelle a una condivisione) vengono memorizzati nella cache per un minuto prima di essere disponibili per la visualizzazione e l’esecuzione di query.
Per leggere i dati condivisi con l'utente:
- Un utente del team trova la condivisione - il contenitore delle tabelle, delle viste, dei volumi e dei notebook condivisi con l'utente - e la usa per creare un catalogo - ovvero il contenitore di primo livello per tutti i dati in Databricks Unity Catalog.
- Un utente del team concede o nega l'accesso al catalogo e agli oggetti all'interno del catalogo (schemi, tabelle, viste e volumi) ad altri membri del team.
- I dati delle tabelle, delle viste e dei volumi a cui è stato concesso l'accesso vengono letti come qualsiasi altra risorsa di dati in Databricks a cui si ha accesso in sola lettura (
SELECT
oREAD VOLUME
). - È possibile visualizzare in anteprima e clonare i notebook nella condivisione, purché si disponga del privilegio
USE CATALOG
per il catalogo.
Autorizzazioni obbligatorie
Per poter elencare e visualizzare i dettagli su tutti i provider e le condivisioni provider, è necessario essere un amministratore del metastore o avere il privilegio USE PROVIDER
. Gli altri utenti hanno accesso solo ai provider e alle condivisioni di cui sono proprietari.
Per creare un catalogo da una condivisione di provider, è necessario essere un amministratore di metastore, un utente che abbia i privilegi CREATE_CATALOG
e USE PROVIDER
per il metastore Unity Catalog o un utente che abbia sia il privilegio CREATE_CATALOG
sia la proprietà dell'oggetto provider.
La possibilità di concedere l'accesso in sola lettura agli schemi (database), alle tabelle, alle viste e ai volumi del catalogo creato dalla condivisione segue la gerarchia di privilegi tipica di Unity Catalog. La possibilità di visualizzare i notebook nel catalogo creato dalla condivisione richiede il privilegio USE CATALOG
nel catalogo. Vedere Gestione delle autorizzazioni per gli schemi, le tabelle e i volumi in un catalogo Delta Sharing.
Visualizzare provider e condivisioni
Per iniziare a leggere i dati condivisi da un fornitore di dati, è necessario conoscere il nome del fornitore e gli oggetti di condivisione memorizzati nel metastore Unity Catalog, una volta che il fornitore abbia condiviso i dati con l'utente.
L'oggetto provider rappresenta il metastore Unity Catalog, la piattaforma cloud e la regione dell'organizzazione che ha condiviso i dati con l'utente.
L'oggetto condivisione rappresenta le tabelle, i volumi e le visualizzazioni condivisi dal provider.
Visualizzare tutti i provider che hanno condiviso i dati con l'utente
Per visualizzare un elenco dei provider di dati disponibili, è possibile usare Esplora Catalog, la CLI di Databricks Unity Catalog, o il comando SQL SHOW PROVIDERS
in un notebook di Azure Databricks o nell'editor di query SQL di Databricks.
Autorizzazioni necessarie: è necessario essere un amministratore del metastore o avere il privilegio USE PROVIDER
. Gli altri utenti hanno accesso solo ai provider e alle condivisioni di cui sono proprietari.
Per informazioni dettagliate, vedere Visualizzare i provider.
Visualizzare i dettagli del provider
Per visualizzare i dettagli di un provider, è possibile usare Esplora Catalog, la CLI di Databricks Unity Catalog, o il comando SQL DESCRIBE PROVIDER
in un notebook di Azure Databricks o nell'editor di query SQL di Databricks.
Autorizzazioni necessarie: è necessario essere un amministratore del metastore, avere il privilegio USE PROVIDER
o possedere l’oggetto provider.
Per informazioni dettagliate, vedere Visualizzare i dettagli del provider.
Visualizzare le condivisioni
Per visualizzare le condivisioni che un provider ha effettuato con l'utente, è possibile usare Esplora Catalog, la CLI di Databricks Unity Catalog, o il comando SQL SHOW SHARES IN PROVIDER
in un notebook di Azure Databricks o nell'editor di query SQL di Databricks.
Autorizzazioni necessarie: è necessario essere un amministratore del metastore, avere il privilegio USE PROVIDER
o possedere l’oggetto provider.
Per informazioni dettagliate, vedere Visualizzare le condivisioni effettuate da un provider con l’utente.
Accedere ai dati in una tabella o un volume condiviso
Per leggere i dati in una tabella o un volume condiviso:
- Un utente con privilegi deve creare un catalogo dalla condivisione che contiene la tabella o il volume. Può essere un amministratore di metastore, un utente che abbia i privilegi
CREATE_CATALOG
eUSE PROVIDER
per il metastore Unity Catalog o un utente che abbia sia il privilegioCREATE_CATALOG
sia la proprietà dell'oggetto provider. - L'utente o un utente con gli stessi privilegi deve concedere l'accesso alla tabella o al volume condiviso.
- È possibile accedere alla tabella o al volume come a qualsiasi altra risorsa di dati registrata nel metastore Unity Catalog.
Creare un catalogo da una condivisione
Per rendere i dati in una condivisione accessibile al team, è necessario creare un catalogo dalla condivisione. Per creare un catalogo da una condivisione, è possibile usare Esplora Catalog, la CLI di Databricks Unity Catalog, o i comandi SQL in un notebook di Azure Databricks o nell'editor di query SQL di Databricks.
Autorizzazioni obbligatorie: un amministratore di metastore, un utente che abbia i privilegi CREATE_CATALOG
e USE PROVIDER
per il metastore Unity Catalog o un utente che abbia sia il privilegio CREATE_CATALOG
sia la proprietà dell'oggetto provider.
Nota
Se la condivisione include delle viste, è necessario utilizzare un nome di catalogo diverso dal nome del catalogo che contiene la vista nel metastore del provider.
Esplora cataloghi
Nell'area di lavoro di Azure Databricks fare clic su Catalogo per aprire Esplora cataloghi.
Nella parte superiore del riquadro Catalogo fare clic sull'icona forma di ingranaggio e selezionare condivisione delta.
In alternativa, nella pagina Accesso rapido fare clic sul pulsante condivisione delta >.
Nella scheda Condivisi con me trovare e selezionare il provider.
Nella scheda Condivisioni trovare la condivisione e fare clic su Crea catalogo nella riga di condivisione.
Immettere un nome per il catalogo e il commento facoltativo.
Cliccare su Crea.
In alternativa, quando si apre Esplora cataloghi, per creare un catalogo condiviso è possibile fare clic su Crea catalogo in alto a destra. Vedere Creare cataloghi.
SQL
Eseguire il seguente comando in un notebook o nell'editor di query SQL di Databricks.
CREATE CATALOG [IF NOT EXISTS] <catalog-name>
USING SHARE <provider-name>.<share-name>;
CLI
databricks catalogs create <catalog-name> /
--provider-name <provider-name> /
--share-name <share-name>
Il catalogo creato da una condivisione ha un tipo di catalogo di Delta Sharing. È possibile visualizzare il tipo nella pagina dei dettagli del catalogo in Catalog Explorer o eseguendo il comando SQL DESCRIBE CATALOG in un notebook o in una query SQL di Databricks. Tutti i cataloghi condivisi sono elencati in Catalogo > condiviso nel riquadro a sinistra di Esplora cataloghi.
Un catalogo Delta Sharing può essere gestito come i normali cataloghi su un metastore Unity Catalog. È possibile visualizzare, aggiornare ed eliminare un catalogo Delta Sharing utilizzando Esplora cataloghi, l'interfaccia della riga di comando di Databricks e i comandi SQL SHOW CATALOGS
, DESCRIBE CATALOG
, ALTER CATALOG
e DROP CATALOG
.
La struttura dello spazio dei nomi a 3 livelli in un catalogo Delta Sharing creato da una condivisione è uguale a quella di un normale catalogo su Unity Catalog: catalog.schema.table
o catalog.schema.volume
.
I dati di tabella e volume in un catalogo condiviso sono di sola lettura, il che significa che è possibile eseguire operazioni di lettura come:
-
DESCRIBE
,SHOW
eSELECT
per le tabelle. -
DESCRIBE VOLUME
,LIST <volume-path>
,SELECT * FROM <format>.'<volume_path>'
eCOPY INTO
per i volumi.
I notebook in un catalogo condiviso possono essere visualizzati in anteprima e clonati da qualsiasi utente con USE CATALOG
nel catalogo.
I modelli in un catalogo condiviso possono essere letti e caricati per l'inferenza da qualsiasi utente con i seguenti privilegi: privilegio EXECUTE
sul modello registrato, più i privilegi USE SCHEMA
e USE CATALOG
sullo schema e sul catalogo che contengono il modello.
Gestione delle autorizzazioni per gli schemi, le tabelle e i volumi in un catalogo Delta Sharing
Per impostazione predefinita, l'autore del catalogo è il proprietario di tutti gli oggetti dati di un catalogo Delta Sharing e può gestire le autorizzazioni per ognuno di essi.
I privilegi sono ereditati verso il basso, anche se in alcune aree di lavoro potrebbe essere ancora presente il modello di sicurezza precedente che non prevedeva l'ereditarietà. Vedere Modello di ereditarietà. Qualsiasi utente a cui viene concesso il privilegio SELECT
sul catalogo avrà il privilegio SELECT
su tutti gli schemi e le tabelle del catalogo, a meno che il privilegio non venga revocato. Analogamente, qualsiasi utente a cui viene concesso il privilegio READ VOLUME
sul catalogo avrà il privilegio READ VOLUME
su tutti i volumi del catalogo, a meno che il privilegio non venga revocato. Non è possibile concedere privilegi che diano accesso in scrittura o aggiornamento a un catalogo Delta Sharing o agli oggetti di un catalogo Delta Sharing.
Il proprietario del catalogo può delegare la proprietà degli oggetti dati ad altri utenti o gruppi, concedendo così a quegli utenti la possibilità di gestire le autorizzazioni e i cicli di vita degli oggetti.
Per informazioni dettagliate sulla gestione dei privilegi negli oggetti dati utilizzando Unity Catalog, vedere Gestione dei privilegi in Unity Catalog.
Leggere i dati di una tabella condivisa
È possibile leggere i dati in una tabella condivisa utilizzando uno qualsiasi degli strumenti a disposizione dell'utente di Azure Databricks: Esplora cataloghi, notebook, query SQL, interfaccia della riga di comando di Databricks e API REST di Databricks. È necessario avere il privilegio SELECT
per la tabella.
Leggere i dati in un volume condiviso
È possibile leggere i dati in un volume condiviso utilizzando uno qualsiasi degli strumenti a disposizione dell'utente di Azure Databricks: Esplora cataloghi, notebook, query SQL, interfaccia della riga di comando di Databricks e API REST di Databricks. È necessario avere il privilegio READ VOLUME
per il volume.
Caricare un modello condiviso per l'inferenza
Per informazioni più dettagliate sul caricamento di un modello condiviso e sul suo utilizzo per l'inferenza in batch, vedere Caricare la versione del modello per alias per i carichi di lavoro di inferenza.
Eseguire query sui dati della cronologia di una tabella
Se la cronologia è condivisa con la tabella, è possibile eseguire query sui dati della tabella in base a una versione o a un timestamp. È necessario Databricks Runtime 12.2 LTS o versione successiva.
Ad esempio:
SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution VERSION AS OF 3;
SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution TIMESTAMP AS OF "2023-01-01 00:00:00";
Inoltre, se il feed di dati delle modifiche (CDF) è abilitato per la tabella, è possibile eseguire una query su CDF. Sono supportati sia la versione sia il timestamp:
SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', 0, 3);
SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', "2023-01-01 00:00:00", "2022-02-01 00:00:00");
Per altre informazioni sul feed di dati delle modifiche, vedere Usare il feed di dati delle modifiche Delta Lake in Azure Databricks.
Eseguire una query su una tabella utilizzando il flusso strutturato di Apache Spark
Se una tabella è condivisa con la cronologia, è possibile utilizzarla come sorgente per il flusso strutturato di Spark. È necessario Databricks Runtime 12.2 LTS o versione successiva.
Opzioni supportate:
-
ignoreDeletes
: ignora le transazioni che eliminano i dati. -
ignoreChanges
: consente di rielaborare gli aggiornamenti se i file sono stati riscritti nella tabella di origine a causa di un'operazione di modifica dei dati, ad esempioUPDATE
,MERGE INTO
,DELETE
(all'interno di partizioni) oOVERWRITE
. Le righe non modificate possono comunque essere generate. Pertanto, gli utenti downstream devono essere in grado di gestire i duplicati. Le eliminazioni non vengono propagate downstream.ignoreChanges
includeignoreDeletes
. Pertanto, se si usaignoreChanges
, il flusso non verrà interrotto da eliminazioni o aggiornamenti alla tabella di origine. -
startingVersion
: versione della tabella condivisa da cui iniziare. Tutte le modifiche alla tabella a partire da questa versione (inclusa) saranno lette dall'origine di streaming. -
startingTimestamp
: timestamp da cui iniziare. Tutte le modifiche alla tabella apportate a partire dal timestamp (incluso) saranno lette dall'origine di streaming. Esempio:"2023-01-01 00:00:00.0"
-
maxFilesPerTrigger
: numero di nuovi file da considerare in ogni micro batch. -
maxBytesPerTrigger
: quantità di dati elaborati in ogni micro batch. Questa opzione imposta un “soft max”, il che significa che un batch elabora approssimativamente questa quantità di dati e potrebbe elaborare più del limite per far avanzare la query di streaming nei casi in cui l'unità di input più piccola è più grande di questo limite. -
readChangeFeed
: Stream legge il feed di dati delle modifiche della tabella condivisa.
Opzioni non supportate:
Trigger.availableNow
Query di esempio per il flusso strutturato
Scala
spark.readStream.format("deltaSharing")
.option("startingVersion", 0)
.option("ignoreChanges", true)
.option("maxFilesPerTrigger", 10)
.table("vaccine.vaccine_us.vaccine_us_distribution")
Python
spark.readStream.format("deltaSharing")\
.option("startingVersion", 0)\
.option("ignoreDeletes", true)\
.option("maxBytesPerTrigger", 10000)\
.table("vaccine.vaccine_us.vaccine_us_distribution")
Se il feed di dati delle modifiche (CDF) è abilitato per la tabella, è possibile leggere in streaming il CDF.
spark.readStream.format("deltaSharing")
.option("readChangeFeed", "true")
.table("vaccine.vaccine_us.vaccine_us_distribution")
Leggere tabelle con vettori di eliminazione o mappatura delle colonne abilitati
Importante
Questa funzionalità è disponibile in anteprima pubblica.
I vettori di eliminazione sono una funzione di ottimizzazione dell'archiviazione che il provider può abilitare sulle tabelle Delta condivise. Si veda Che cosa sono i vettori di eliminazione?.
Azure Databricks supporta anche il mapping delle colonne per le tabelle Delta. Si veda Rinominare ed eliminare le colonne con mapping di colonne Delta Lake.
Se il provider ha condiviso una tabella con vettori di eliminazione o mapping delle colonne abilitati, è possibile eseguire letture batch sulla tabella utilizzando un warehouse SQL o un cluster con Databricks Runtime 14.1 o versione successiva. Le query CDF e di streaming richiedono Databricks Runtime 14.2 o versione successiva.
È possibile eseguire le query batch così come sono, perché possono risolvere automaticamente responseFormat
in base alle caratteristiche della tabella condivisa.
Per leggere un feed di dati delle modifiche (CDF) o per eseguire query di streaming su tabelle condivise con vettori di eliminazione o mapping di colonne abilitati, è necessario impostare l'opzione responseFormat=delta
aggiuntiva.
I seguenti esempi illustrano le query batch, CDF e streaming:
import org.apache.spark.sql.SparkSession
// Batch query
spark.read.format("deltaSharing").table(<tableName>)
// CDF query
spark.read.format("deltaSharing")
.option("readChangeFeed", "true")
.option("responseFormat", "delta")
.option("startingVersion", 1)
.table(<tableName>)
// Streaming query
spark.readStream.format("deltaSharing").option("responseFormat", "delta").table(<tableName>)
Leggere viste condivise
Importante
Questa funzionalità è disponibile in anteprima pubblica.
La lettura delle visualizzazioni condivise è identica alla lettura di tabelle condivise, salvo le seguenti eccezioni:
Restrizioni alla condivisione di viste:
- Non è possibile condividere viste che fanno riferimento a tabelle o viste condivise.
- Le visualizzazioni condivise supportano solo un subset di funzioni e operatori predefiniti in Databricks. Consulta le funzioni supportate nelle viste condivise da Databricks a Databricks .
Requisiti per la denominazione:
Il nome del catalogo utilizzato per il catalogo condiviso che contiene la vista non può essere lo stesso del catalogo del provider che contiene una tabella a cui la vista fa riferimento. Ad esempio, se la vista condivisa è contenuta nel catalogo test
dell’utente e una delle tabelle del provider a cui fa riferimento la vista è contenuta nel catalogo test
del provider, la query produrrà un errore di conflitto di spazi dei nomi. Vedere Creare un catalogo da una condivisione.
Cronologia e streaming:
Non è possibile eseguire query sulla cronologia o usare una vista come origine di streaming.
Visualizzare il supporto nella condivisione aperta:
Le istruzioni riportate in questo articolo si concentrano sulla lettura dei dati condivisi utilizzando le interfacce utente di Azure Databricks, in particolare la sintassi e le interfacce di Unity Catalog. È anche possibile eseguire query su visualizzazioni condivise usando strumenti apache Spark, Python e BI come Tableau e Power BI.
Costi:
Esistono due potenziali fonti di costi per la condivisione delle visualizzazioni:
- Costo di calcolo, addebitato da Databricks.
- Costi di archiviazione e trasferimento di rete (in uscita), addebitati dal fornitore di archiviazione.
Il costo di calcolo si basa sul tipo di risorsa di calcolo del destinatario:
Calcolo destinatario | Chi paga? | SKU |
---|---|---|
Databricks Serverless | Destinatario | SKU serverless usato dal destinatario |
Databricks Classic | Destinatario | Interactive Serverless |
Aprire connettori di condivisione delta | Provider | Interactive Serverless |
Leggere i notebook condivisi
Per visualizzare in anteprima e clonare file di notebook condivisi, è possibile usare Esplora cataloghi.
Autorizzazioni necessarie: proprietario del catalogo o utente con il privilegio USE CATALOG
per il catalogo creato dalla condivisione.
Nell'area di lavoro di Azure Databricks fare clic su Catalogo.
Nel riquadro a sinistra, espandere il menu Catalogo, trovare e selezionare il catalogo creato dalla condivisione.
Nella scheda Altre risorse verranno visualizzati tutti i file di notebook condivisi.
Fare clic sul nome di un file di notebook condiviso per visualizzarlo in anteprima.
(Facoltativo) Fare clic sul pulsante Clona per importare il file del notebook condiviso nell'area di lavoro.
- Nella finestra di dialogo Clona in immettere facoltativamente un Nuovo nome, poi selezionare la cartella dell'area di lavoro in cui clonare il file del notebook.
- Fare clic su Clona.
- Una volta che il notebook è stato clonato, viene visualizzata una finestra di dialogo per informare che la clonazione è avvenuta con successo. Fare clic su Visualizza nell'editor dei notebook nella finestra di dialogo per visualizzarla nell'editor dei notebook.