Condividi tramite


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.

Panoramica della derivazione

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 nome lineagedemo 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 e USE 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 schema lineagedemo nel lineage_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:

  1. Accedere alla pagina di destinazione di Azure Databricks, fare clic suNuova icona Nuovo nella barra laterale e selezionare Notebook dal menu.

  2. Immettere un nome per il notebook e selezionare SQL in Lingua predefinita.

  3. In Cluster selezionare un cluster con accesso a Unity Catalog.

  4. Cliccare su Crea.

  5. 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
    
  6. Per eseguire le query, fare clic nella cella e premere MAIUSC+INVIO oppure fare clic su Esegui Menu e selezionare Esegui cella.

Per usare Esplora cataloghi per visualizzare la derivazione generata da queste query:

  1. Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks cercare la tabella lineage_data.lineagedemo.dinner e selezionarla.

  2. Selezionare la scheda Derivazione. Viene visualizzato il pannello di derivazione e vengono visualizzate le tabelle correlate (in questo esempio è la tabella menu).

  3. 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 Icona del segno di addizione in un nodo per visualizzare altre connessioni, se disponibili.

  4. 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.

    Grafico di derivazione

  5. 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.

  6. 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:

    Derivazione della colonna del menu completo

Per visualizzare la derivazione usando un linguaggio diverso, ad esempio Python:

  1. 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")
    
  2. Eseguire la cella facendo clic nella cella e premendo MAIUSC+INVIO oppure facendo clic su Esegui Menu e selezionando Esegui cella.

  3. Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks cercare la tabella lineage_data.lineagedemo.price e selezionarla.

  4. Andare alla scheda Derivazione e fare clic su Visualizza grafico di derivazione. Fare clic sulle icone Icona del segno di addizione per esplorare la derivazione dei dati generata dalle query.

    Grafico di derivazione espanso

  5. 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:

  1. Fare clic su Nuova icona Nuovo nella barra laterale e selezionare Notebook dal menu.

  2. Immettere un nome per il notebook e selezionare SQL in Lingua predefinita.

  3. Cliccare su Crea.

  4. Nella prima cella del notebook immettere la seguente query:

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. 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.

  6. Cliccare Run now (Esegui adesso).

  7. Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks cercare la tabella lineage_data.lineagedemo.menu e selezionarla.

  8. 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:

  1. Andare alla pagina di destinazione di Azure Databricks e aprire Esplora cataloghi facendo clic su Catalogo nella barra laterale.

  2. 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 tabella menu.

  3. Fare clic su Apri in un dashboard.

  4. Selezionare le colonne da aggiungere al dashboard e fare clic su Crea.

  5. Pubblicare il dashboard.

    Solo i dashboard pubblicati vengono rilevati nella derivazione dei dati.

  6. Nella casella Cerca nella barra superiore cercare la tabella lineage_data.lineagedemo.menu e selezionarla.

  7. 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 richiesta runs 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 su true. L'abilitazione di questo flag può rallentare le prestazioni delle query, in particolare nei carichi di lavoro che coinvolgono tabelle molto ampie.