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 lineage è supportata per tutte le lingue ed è registrata 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. In particolare, le tabelle e altri oggetti dati registrati nel metastore sono visibili agli utenti che hanno almeno BROWSE
autorizzazioni per tali oggetti, in tutte le aree di lavoro collegate al metastore. Tuttavia, vengono mascherate informazioni dettagliate sugli oggetti a livello di area di lavoro, come notebook e dashboard in altre aree di lavoro (vedere Limitazioni e autorizzazioni di tracciabilità).
I dati di derivazione vengono conservati per un 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, vedere 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 Catalogo Unity 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 degli 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 principale deve essere anch'esso accessibile dall'area di lavoro. Vedere Limitare l'accesso al catalogo a 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 tracciabilità di una pipeline abilitata al Catalogo Unity, è necessario disporre delle autorizzazioni
CAN_VIEW
sulla pipeline. - Il monitoraggio della tracciabilità dello streaming tra tabelle Delta richiede Databricks Runtime 11.3 LTS o una versione successiva.
- Il rilevamento della derivazione delle colonne per i carichi di lavoro DLT 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 di 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 VNet (nota anche come inserimento di reti virtuali). Per ottenere l'endpoint di Hub eventi per l'area di lavoro, vedere Metastore, archiviazione BLOB degli artefatti, archiviazione delle tabelle di sistema, archiviazione BLOB dei log e indirizzi IP degli endpoint di 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
Gli esempi seguenti usano il nome del catalogo
lineage_data
e il nome dello schemalineagedemo
. 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, il proprietario dello schema o un utente con il privilegioMANAGE
nello schema può concedere questi privilegi. Ad esempio, per concedere a tutti gli utenti del gruppo 'data_engineers' l'autorizzazione per creare tabelle nello schemalineagedemo
nel catalogolineage_data
, un utente con uno dei privilegi o ruoli precedenti può eseguire le query seguenti:CREATE SCHEMA lineage_data.lineagedemo; GRANT USE SCHEMA, CREATE on SCHEMA lineage_data.lineagedemo to `data_engineers`;
Catturare ed esplorare la linea di successione
Per acquisire dati di derivazione:
Passare 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 Clusterselezionare 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
Menu Esegui e selezionare Esegui cella.
Per usare Esplora cataloghi per visualizzare la derivazione generata da queste query:
Nella casella di ricerca 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 che mostra le tabelle correlate (per questo esempio si tratta della 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
su 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 Lineage mostra i dettagli sulla connessione, incluse le tabelle di origine e di destinazione, i notebook e i processi.
Per visualizzare il notebook associato alla tabella
dinner
, selezionare il notebook nel pannello connessione di 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")
Esegui la cella cliccando nella cella e premendo Shift+Invio oppure cliccando su
e selezionando Esegui cella.
Nella casella di ricerca 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 della connessione Lineage mostra i dettagli sulla connessione, incluse le tabelle di origine e di destinazione, i notebook e i processi.
Acquisire e visualizzare il lineage del flusso di lavoro
La tracciabilità viene acquisita anche per ogni flusso di lavoro che accede a Unity Catalog per leggere o scrivere. 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 pianificazione selezionare Manuale, selezionare un cluster con accesso al catalogo Unity e fare clic su Crea.
Cliccare Run now (Esegui adesso).
Nella casella di ricerca nella barra superiore dell'area di lavoro di Azure Databricks, cercare la tabella
lineage_data.lineagedemo.menu
e selezionarla.Nella scheda Lineage, fare clic su Flussi di Lavoro, e selezionare la scheda Downstream. Il nome del processo appare 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:
Passare alla pagina di destinazione di Azure Databricks e aprire Esplora cataloghi facendo clic su Catalog nella barra laterale.
Fare clic sul nome del catalogo, fare clic su lineagedemo, e selezionare la tabella
menu
. È anche possibile usare la casella ricercanella barra superiore per cercare la tabella . 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 monitorati nella derivazione dei dati.
Nella casella Cerca nella barra superiore cercare la tabella
lineage_data.lineagedemo.menu
e selezionarla.Nella scheda Lineage fare clic su Dashboards. Il dashboard appare sotto Nome dashboard come utilizzatore della tabella dei menu.
Autorizzazioni di derivazione.
I grafici di lineage condividono lo stesso modello di autorizzazione di Unity Catalog. Le tabelle e altri oggetti dati registrati nel metastore del catalogo Unity sono visibili solo agli utenti che dispongono almeno di autorizzazioni BROWSE
per tali oggetti. Se un utente non dispone del privilegio BROWSE
o SELECT
per una tabella, non può esplorarne la derivazione. I grafici di derivazione mostrano gli oggetti del Catalogo Unity in tutte le aree di lavoro collegate al metastore, a condizione che l'utente disponga di adeguate autorizzazioni sugli oggetti.
Ad esempio, eseguire i comandi seguenti per 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 per userA
e userA
non è in grado di espandere il grafico per visualizzare le tabelle downstream dalle tabelle a cui non dispone dell'autorizzazione per accedere.
Se si esegue il comando seguente per concedere all'BROWSE
l'autorizzazione per userB
, tale utente può visualizzare il grafico di derivazione per qualsiasi tabella nello schema lineage_data
.
GRANT BROWSE on lineage_data to `userB@company.com`;
Analogamente, gli utenti di derivazione devono disporre di autorizzazioni specifiche per visualizzare oggetti dell'area di lavoro come notebook, processi e dashboard. Inoltre, possono visualizzare solo informazioni dettagliate sugli oggetti dell'area di lavoro quando vengono connessi all'area di lavoro in cui sono stati creati tali oggetti. Le informazioni dettagliate sugli oggetti a livello di area di lavoro in altre aree di lavoro sono mascherate nel grafico di derivazione.
Per altre informazioni sulla gestione dell'accesso a oggetti a protezione diretta in Unity Catalog, vedere Gestire i 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 istruzioni seguenti eliminano tutti gli oggetti archiviati nel catalogo unity. 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 del catalogo Unity. Per altre informazioni sull'eliminazione del metastore, vedere Eliminare un metastore. I dati verranno eliminati entro 90 giorni.
Ottenere la derivazione della tabella con Databricks Assistant
Databricks Assistant fornisce informazioni dettagliate sui lineaggi delle tabelle e approfondimenti.
Per ottenere informazioni sulla derivazione tramite Assistente:
- Passare alla pagina di destinazione di Azure Databricks e aprire Catalog Explorer facendo clic sull'icona
Catalogo nella barra laterale.
- Fare clic sul nome del catalogo e poi sull'icona Assistente di aiuto del prodotto
nell'angolo in alto a destra.
- Al prompt dell'Assistente digitare:
- /getTableLineages per visualizzare le dipendenze upstream e downstream.
- /getTableInsights per accedere a informazioni dettagliate basate sui metadati, ad esempio attività utente e modelli di query.
Queste query consentono all'Assistente di rispondere a domande come "mostra i flussi a valle" o "chi interroga più spesso questa tabella".
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, vedi Monitorare l'attività dell'account con le tabelle di sistema e Riferimento alle tabelle di sistema Lineage.
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 tracciabilità dei dati usando la REST API
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 programmatico 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.
Risposta
{
"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 il lineage 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.
Risposta
{
"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
Sebbene la derivazione sia aggregata per tutte le aree di lavoro collegate allo stesso metastore del catalogo Unity, i dettagli degli oggetti dell'area di lavoro come notebook e dashboard sono visibili solo nell'area di lavoro in cui sono stati creati.
Poiché la derivazione viene calcolata in una finestra mobile di un anno, la derivazione raccolta più di un anno fa non viene visualizzata. Ad esempio, se un processo o una query legge dati dalla tabella A e scrive nella tabella B, il collegamento tra la tabella A e la 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 job che utilizzano la richiesta dell'API Job
runs submit
non sono disponibili durante la visualizzazione del lineage. 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 tracciamento al livello di colonna il più possibile. 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 della tabella (ad esempio:
select * from <catalog>.<schema>.<table>
). Non è possibile acquisire la derivazione delle colonne se l'origine o la destinazione è indirizzata dal percorso (ad esempio:select * from delta."s3://<bucket>/<path>"
).Se una tabella o una vista viene rinominata, la derivazione non viene acquisita per la tabella o la vista rinominata.
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 Unity Catalog acquisisce la provenienza dalle pipeline DLT nella maggior parte dei casi. In alcune circostanze, non è possibile garantire una copertura completa del lineage, ad esempio quando le pipeline utilizzano 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 sotto
system.information_schema
non vengono acquisite nel lineage.La derivazione completa a livello di colonna non viene acquisita per impostazione predefinita per le operazioni di
MERGE
.È possibile attivare l'acquisizione della derivazione delle operazioni
MERGE
impostando la proprietà Sparkspark.databricks.dataLineage.mergeIntoV2Enabled
sutrue
. L'abilitazione di questo flag può rallentare le prestazioni delle query, in particolare nei carichi di lavoro che coinvolgono tabelle molto ampie.