Acquisire e visualizzare la derivazione dei dati con Unity Catalog
Questo articolo descrive come acquisire e visualizzare la derivazione dei dati usando Esplora cataloghi, le tabelle di sistema di derivazione dei dati e l'API REST.
È possibile usare Unity Catalog per acquisire la derivazione dei dati di runtime tra query eseguite in Azure Databricks. La derivazione è supportata per tutte le lingue e viene acquisita fino al livello di colonna. I dati di derivazione includono notebook, processi e dashboard correlati alla query. La derivazione può essere visualizzata in Esplora cataloghi quasi in tempo reale e recuperata a livello di codice usando le tabelle di sistema di derivazione e l'API REST di Databricks.
La derivazione viene aggregata in tutte le aree di lavoro collegate a un metastore di Unity Catalog. Ciò significa che la derivazione acquisita in un'area di lavoro è visibile in qualsiasi altra area di lavoro che condivide tale metastore. Gli utenti devono disporre delle autorizzazioni corrette per visualizzare i dati di derivazione. I dati di derivazione vengono conservati per 1 anno.
La seguente immagine seguente è un grafico di derivazione di esempio. Le funzionalità e gli esempi specifici di derivazione dei dati vengono trattati più avanti in questo articolo.
Per informazioni sul rilevamento della derivazione di un modello di Machine Learning, si veda Tenere traccia della derivazione dei dati di un modello in Unity Catalog.
Requisiti
Per acquisire la derivazione dei dati con Unity Catalog, sono necessari gli elementi seguenti:
L'area di lavoro deve avere Unity Catalog abilitato.
Le tabelle devono essere registrate in un metastore del catalogo Unity.
Le query devono usare il dataframe Spark (ad esempio, le funzioni SPARK SQL che restituiscono un dataframe) o le interfacce SQL di Databricks. Per esempi di query SQL e PySpark di Databricks, vedere Esempi.
Per visualizzare la derivazione di una tabella o di una vista, gli utenti devono avere almeno il privilegio
BROWSE
nel catalogo padre della tabella o della vista. Il catalogo padre deve essere accessibile anche dall'area di lavoro. Vedere Limitare l'accesso al catalogo ad aree di lavoro specifiche.Per visualizzare le informazioni sulla derivazione per notebook, processi o dashboard, gli utenti devono disporre delle autorizzazioni per questi oggetti, come definito dalle impostazioni di controllo di accesso nell'area di lavoro. Vedere Autorizzazioni di derivazione.
Per visualizzare la derivazione per una pipeline abilitata per Unity Catalog, è necessario disporre delle autorizzazioni
CAN_VIEW
per la pipeline.Il rilevamento della derivazione dello streaming tra tabelle Delta richiede Databricks Runtime 11.3 LTS o versione successiva.
Il rilevamento della derivazione delle colonne per i carichi di lavoro delle tabelle live Delta richiede Databricks Runtime 13.3 LTS o versione successiva.
Potrebbe essere necessario aggiornare le regole del firewall in uscita per consentire la connettività all'endpoint degli hub eventi nel piano di controllo di Azure Databricks. In genere questo vale se l'area di lavoro di Azure Databricks viene implementata nella propria rete virtuale (nota anche come inserimento reti virtuali). Per ottenere l'endpoint degli hub eventi per l'area dell'area di lavoro, vedere Metastore, archivio BLOB artefatto, archiviazione tabelle di sistema, archiviazione BLOB di log e indirizzi IP dell'endpoint degli hub eventi. Per informazioni sulla configurazione di percorsi definiti dall'utente per Azure Databricks, vedere Impostazioni di percorsi definiti dall'utente per Azure Databricks.
Esempi:
Nota
Negli esempi seguenti vengono usati il nome
lineage_data
del catalogo e il nomelineagedemo
dello schema . Per usare un catalogo e uno schema diversi, modificare i nomi usati negli esempi.Per completare questo esempio, è necessario disporre di privilegi
CREATE
eUSE SCHEMA
per uno schema. Un amministratore del metastore, il proprietario del catalogo o il proprietario dello schema può concedere questi privilegi. Ad esempio, per concedere a tutti gli utenti del gruppo 'data_engineers' l'autorizzazione per creare tabelle nello schemalineagedemo
nellineage_data
catalogo , un utente con uno dei privilegi o ruoli precedenti può eseguire le seguenti query:CREATE SCHEMA lineage_data.lineagedemo; GRANT USE SCHEMA, CREATE on SCHEMA lineage_data.lineagedemo to `data_engineers`;
Acquisire ed esplorare la derivazione
Per acquisire dati di derivazione:
Accedere alla pagina di destinazione di Azure Databricks, fare clic su Nuovo nella barra laterale e selezionare Notebook dal menu.
Immettere un nome per il notebook e selezionare SQL in Lingua predefinita.
In Cluster selezionare un cluster con accesso a Unity Catalog.
Cliccare su Crea.
Nella prima cella del notebook immettere le seguenti query:
CREATE TABLE IF NOT EXISTS lineage_data.lineagedemo.menu ( recipe_id INT, app string, main string, dessert string ); INSERT INTO lineage_data.lineagedemo.menu (recipe_id, app, main, dessert) VALUES (1,"Ceviche", "Tacos", "Flan"), (2,"Tomato Soup", "Souffle", "Creme Brulee"), (3,"Chips","Grilled Cheese","Cheesecake"); CREATE TABLE lineage_data.lineagedemo.dinner AS SELECT recipe_id, concat(app," + ", main," + ",dessert) AS full_menu FROM lineage_data.lineagedemo.menu
Per eseguire le query, fare clic nella cella e premere MAIUSC+INVIO oppure fare clic su e selezionare Esegui cella.
Per usare Esplora cataloghi per visualizzare la derivazione generata da queste query:
Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks cercare la tabella
lineage_data.lineagedemo.dinner
e selezionarla.Selezionare la scheda Derivazione. Viene visualizzato il pannello di derivazione e vengono visualizzate le tabelle correlate (in questo esempio è la tabella
menu
).Per visualizzare un grafico interattivo della derivazione dei dati, fare clic su Visualizza grafico di derivazione. Per impostazione predefinita, nel grafico viene visualizzato un livello. Fare clic sull'icona in un nodo per visualizzare altre connessioni, se disponibili.
Fare clic su una freccia che connette i nodi nel grafico di derivazione per aprire il pannello Connessione derivazione. Il pannello Connessione derivazione mostra informazioni dettagliate sulla connessione, incluse tabelle di origine e di destinazione, notebook e processi.
Per visualizzare il notebook associato alla tabella
dinner
, selezionare il notebook nel pannello Connessione derivazione o chiudere il grafico di derivazione e fare clic su Notebook. Per aprire il notebook in una nuova scheda, fare clic sul nome del notebook.Per visualizzare la derivazione a livello di colonna, fare clic su una colonna nel grafico per visualizzare i collegamenti alle colonne correlate. Ad esempio, facendo clic sulla colonna "full_menu" vengono visualizzate le colonne upstream da cui è stata derivata la colonna:
Per visualizzare la derivazione usando un linguaggio diverso, ad esempio Python:
Aprire il notebook creato in precedenza, creare una nuova cella e immettere il codice Python seguente:
%python from pyspark.sql.functions import rand, round df = spark.range(3).withColumn("price", round(10*rand(seed=42),2)).withColumnRenamed("id","recipe_id") df.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.price") dinner = spark.read.table("lineage_data.lineagedemo.dinner") price = spark.read.table("lineage_data.lineagedemo.price") dinner_price = dinner.join(price, on="recipe_id") dinner_price.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.dinner_price")
Eseguire la cella facendo clic nella cella e premendo MAIUSC+INVIO oppure facendo clic su e selezionando Esegui cella.
Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks cercare la tabella
lineage_data.lineagedemo.price
e selezionarla.Andare alla scheda Derivazione e fare clic su Visualizza grafico di derivazione. Fare clic sulle icone per esplorare la derivazione dei dati generata dalle query.
Fare clic su una freccia che connette i nodi nel grafico di derivazione per aprire il pannello Connessione derivazione. Il pannello Connessione derivazione mostra informazioni dettagliate sulla connessione, incluse tabelle di origine e di destinazione, notebook e processi.
Acquisire e visualizzare la derivazione del flusso di lavoro
La derivazione viene acquisita anche per qualsiasi flusso di lavoro che legge o scrive in Unity Catalog. Per visualizzare la derivazione per un flusso di lavoro di Azure Databricks:
Fare clic su Nuovo nella barra laterale e selezionare Notebook dal menu.
Immettere un nome per il notebook e selezionare SQL in Lingua predefinita.
Cliccare su Crea.
Nella prima cella del notebook immettere la seguente query:
SELECT * FROM lineage_data.lineagedemo.menu
Fare clic su Pianifica nella barra superiore. Nella finestra di dialogo di pianificazione selezionare Manuale, selezionare un cluster con accesso a Unity Catalog e fare clic su Crea.
Cliccare Run now (Esegui adesso).
Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks cercare la tabella
lineage_data.lineagedemo.menu
e selezionarla.Nella scheda Derivazione fare clic su Flussi di lavoro e selezionare la scheda Downstream. Il nome del processo viene visualizzato in Nome processo come consumer della tabella
menu
.
Acquisire e visualizzare la derivazione del dashboard
Per creare un dashboard e visualizzarne la derivazione dei dati:
Andare alla pagina di destinazione di Azure Databricks e aprire Esplora cataloghi facendo clic su Catalogo nella barra laterale.
Fare clic sul nome del catalogo, fare clic su lineagedemo e selezionare la tabella
menu
. È anche possibile usare la casella Cerca nella barra superiore per cercare la tabellamenu
.Fare clic su Apri in un dashboard.
Selezionare le colonne da aggiungere al dashboard e fare clic su Crea.
Pubblicare il dashboard.
Solo i dashboard pubblicati vengono rilevati nella derivazione dei dati.
Nella casella Cerca nella barra superiore cercare la tabella
lineage_data.lineagedemo.menu
e selezionarla.Nella scheda Derivazione fare clic su Dashboard. Il dashboard viene visualizzato in Nome dashboard come consumer della tabella dei menu.
Autorizzazioni di derivazione.
I grafici di derivazione condividono lo stesso modello di autorizzazione di Unity Catalog. Se un utente non dispone del privilegio BROWSE
o SELECT
di una tabella, non può esplorare la derivazione. Inoltre, gli utenti possono visualizzare solo notebook, processi e dashboard autorizzati a visualizzare. Ad esempio, se si eseguono i seguenti comandi per un utente non amministratore userA
:
GRANT USE SCHEMA on lineage_data.lineagedemo to `userA@company.com`;
GRANT SELECT on lineage_data.lineagedemo.menu to `userA@company.com`;
Quando userA
visualizza il grafico di derivazione per la tabella lineage_data.lineagedemo.menu
, verrà visualizzata la tabella menu
. Non saranno in grado di visualizzare informazioni sulle tabelle associate, ad esempio la tabella downstream lineage_data.lineagedemo.dinner
. La tabella dinner
viene visualizzata come nodo masked
nella visualizzazione in userA
e userA
non può espandere il grafico per visualizzare le tabelle downstream dalle tabelle a cui non dispone dell'autorizzazione per accedere.
Se si esegue il seguente comando per concedere l'autorizzazione BROWSE
all'utente non amministratore userB
:
GRANT BROWSE on lineage_data to `userA@company.com`;
userB
adesso può visualizzare il grafico di derivazione per qualsiasi tabella nello schema lineage_data
.
Per ulteriori informazioni su come gestire gli accessi a oggetti a protezione diretta in Unity Catalog, si veda Gestire privilegi in Unity Catalog. Per altre informazioni sulla gestione dell'accesso agli oggetti dell'area di lavoro, ad esempio notebook, processi e dashboard, si veda Elenchi di controllo di accesso.
Eliminare i dati di derivazione
Avviso
Le seguenti istruzioni eliminano tutti gli oggetti archiviati in Unity Catalog. Seguire queste istruzioni solo se necessario. Ad esempio, per soddisfare i requisiti di conformità.
Per eliminare i dati di derivazione, è necessario eliminare il metastore che gestisce gli oggetti di Unity Catalog. Per altre informazioni sull'eliminazione del metastore, vedere Eliminare un metastore. I dati verranno eliminati entro 90 giorni.
Eseguire query sui dati di derivazione usando le tabelle di sistema
È possibile usare le tabelle di sistema di derivazione per eseguire query sui dati di derivazione a livello di codice. Per istruzioni dettagliate, vedere Monitorare l'attività dell'account con le tabelle di sistema e informazioni di riferimento sulle tabelle di sistema di derivazione.
Se l'area di lavoro si trova in un'area che non supporta le tabelle di sistema di derivazione, in alternativa è possibile usare l'API REST Derivazione dati per recuperare i dati di derivazione a livello di codice.
Recuperare la derivazione usando l'API REST Derivazione dei dati
L'API di derivazione dei dati consente di recuperare la derivazione di tabelle e colonne. Tuttavia, se l'area di lavoro si trova in un'area che supporta le tabelle di sistema di derivazione, è consigliabile usare query di tabella di sistema anziché l'API REST. Le tabelle di sistema sono un'opzione migliore per il recupero a livello di codice dei dati di derivazione. La maggior parte delle aree supporta le tabelle di sistema di derivazione.
Importante
Per accedere alle API REST di Databricks, è necessario eseguire l'autenticazione.
Recuperare la derivazione della tabella
In questo esempio vengono recuperati i dati di derivazione per la tabella dinner
.
Richiedi
curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/table-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "include_entity_lineage": true}'
Sostituire <workspace-instance>
.
In questo esempio viene usato un file .netrc.
Response
{
"upstreams": [
{
"tableInfo": {
"name": "menu",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_type": "TABLE"
},
"notebookInfos": [
{
"workspace_id": 4169371664718798,
"notebook_id": 1111169262439324
}
]
}
],
"downstreams": [
{
"notebookInfos": [
{
"workspace_id": 4169371664718798,
"notebook_id": 1111169262439324
}
]
},
{
"tableInfo": {
"name": "dinner_price",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_type": "TABLE"
},
"notebookInfos": [
{
"workspace_id": 4169371664718798,
"notebook_id": 1111169262439324
}
]
}
]
}
Recuperare la derivazione delle colonne
In questo esempio vengono recuperati i dati delle colonne per la tabella dinner
.
Richiedi
curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/column-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "column_name": "dessert"}'
Sostituire <workspace-instance>
.
In questo esempio viene usato un file .netrc.
Response
{
"upstream_cols": [
{
"name": "dessert",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "menu",
"table_type": "TABLE"
},
{
"name": "main",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "menu",
"table_type": "TABLE"
},
{
"name": "app",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "menu",
"table_type": "TABLE"
}
],
"downstream_cols": [
{
"name": "full_menu",
"catalog_name": "lineage_data",
"schema_name": "lineagedemo",
"table_name": "dinner_price",
"table_type": "TABLE"
}
]
}
Limiti
Poiché la derivazione viene calcolata in una finestra di sequenza di un anno, la derivazione raccolta più di un anno fa non viene visualizzata. Ad esempio, se un processo o una query legge i dati dalla tabella A e scrive nella tabella B, il collegamento tra tabella A e tabella B viene visualizzato solo per un anno. È possibile filtrare i dati di derivazione in base all'intervallo di tempo all'interno della finestra di un anno.
I processi che usano la richiesta dell'API Processi
runs submit
non sono disponibili durante la visualizzazione della derivazione. La derivazione a livello di tabella e colonna viene ancora acquisita quando si usa la richiestaruns submit
, ma il collegamento all'esecuzione non viene acquisito.Il catalogo Unity acquisisce il più possibile la derivazione al livello di colonna. Tuttavia, esistono alcuni casi in cui non è possibile acquisire la derivazione a livello di colonna.
La derivazione delle colonne è supportata solo quando si fa riferimento sia all'origine che alla destinazione in base al nome tabella (esempio:
select * from <catalog>.<schema>.<table>
). La derivazione delle colonne non può essere acquisita se l'origine o la destinazione sono indirizzate in base al percorso (esempio:select * from delta."s3://<bucket>/<path>"
).Se una tabella o una vista vengono rinominate, la derivazione non viene acquisita per la tabella o la vista rinominate.
Se uno schema o un catalogo viene rinominato, la derivazione non viene acquisita per tabelle e viste nel catalogo o nello schema rinominato.
Se si usa il checkpoint del set di dati Spark SQL, la derivazione non viene acquisita.
Il catalogo Unity acquisisce la derivazione dalle pipeline di tabelle live Delta nella maggior parte dei casi. In alcuni casi, tuttavia, non è possibile garantire una copertura di derivazione completa, ad esempio quando le pipeline usano l'API APPLY CHANGES o le tabelle TEMPORANEE.
La derivazione non acquisisce le funzioni stack.
Le visualizzazioni temporanee globali non vengono acquisite in derivazione.
Le tabelle in
system.information_schema
non vengono acquisite in derivazione.La derivazione completa a livello di colonna non viene acquisita per impostazione predefinita per
MERGE
le operazioni.È possibile attivare l'acquisizione della derivazione per
MERGE
le operazioni impostando la proprietàspark.databricks.dataLineage.mergeIntoV2Enabled
Spark sutrue
. L'abilitazione di questo flag può rallentare le prestazioni delle query, in particolare nei carichi di lavoro che coinvolgono tabelle molto ampie.