Acquisire e visualizzare la derivazione dei dati con Unity Catalog

È 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, flussi di lavoro e dashboard correlati alla query. La derivazione può essere visualizzata in Esplora cataloghi quasi in tempo reale e recuperata con l'API REST di Databricks.

Nota

È anche possibile visualizzare ed eseguire query sui dati di derivazione usando le tabelle di sistema di derivazione (anteprima pubblica). Per altre informazioni, vedere Informazioni di riferimento sulle tabelle di sistema di derivazione.

La derivazione viene aggregata in tutte le aree di lavoro collegate a un metastore del catalogo Unity. 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.

Questo articolo descrive come visualizzare la derivazione usando Esplora cataloghi e l'API REST. 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 il 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 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 BROWSE privilegio per il catalogo padre della tabella o della vista.

  • Per visualizzare le informazioni sulla derivazione per notebook, flussi di lavoro 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 il catalogo unity, è necessario disporre CAN_VIEW delle autorizzazioni per la pipeline.

  • Potrebbe essere necessario aggiornare le regole del firewall in uscita per consentire la connettività all'endpoint dell'hub eventi nel piano di controllo di Azure Databricks. Questo vale in genere se l'area di lavoro di Azure Databricks viene distribuita nella propria rete virtuale (nota anche come inserimento reti virtuali). Per ottenere l'endpoint dell'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 dell'hub eventi. Per informazioni sulla configurazione di route definite dall'utente per Azure Databricks, vedere Impostazioni di route definite dall'utente per Azure Databricks.

Limiti

  • Lo streaming tra tabelle Delta è supportato solo in Databricks Runtime 11.3 LTS o versione successiva.

  • Poiché la derivazione viene calcolata in una finestra mobile di 1 anno, la derivazione raccolta più di 1 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 la tabella A e la tabella B viene visualizzato solo per 1 anno.

    È possibile filtrare i dati di derivazione in base all'intervallo di tempo. Quando si seleziona "Tutta la derivazione", vengono visualizzati i dati di derivazione raccolti a partire da giugno 2023.

  • I flussi di lavoro che usano la richiesta API runs submit Processi non sono disponibili durante la visualizzazione della derivazione. La derivazione a livello di tabella e colonna viene ancora acquisita quando si usa la runs submit richiesta, 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 della tabella (esempio: select * from <catalog>.<schema>.<table>). Impossibile acquisire la derivazione delle colonne se l'origine o la destinazione sono indirizzate dal percorso (esempio: select * from delta."s3://<bucket>/<path>").

  • Se viene rinominata una tabella, la derivazione non viene acquisita per la tabella rinominata.

  • Se si usa il checkpoint del set di dati Spark SQL, la derivazione non viene acquisita. Vedere pyspark.sql.DataFrame.checkpoint nella documentazione di Apache Spark.

  • 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 TEMPORARY.

Esempi:

Nota

  • Negli esempi seguenti vengono usati il nome lineage_data del catalogo e il nome lineagedemodello schema . Per usare un catalogo e uno schema diversi, modificare i nomi usati negli esempi.

  • Per completare questo esempio, è necessario disporre CREATE di privilegi 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 lineagedemo schema nel lineage_data catalogo, 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`;
    

Acquisire ed esplorare la derivazione

Per acquisire dati di derivazione, seguire questa procedura:

  1. Passare alla pagina di destinazione di Azure Databricks, fare clic su Nuova iconaNuovo 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. Fai clic su Crea.

  5. Nella prima cella del notebook immettere le query seguenti:

    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 Menu Esegui e selezionare Esegui cella.

Per usare Esplora cataloghi per visualizzare la derivazione generata da queste query, seguire questa procedura:

  1. Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks immettere lineage_data.lineagedemo.dinner e fare clic su Cerca lineage_data.lineagedemo.dinner in Databricks.

  2. In Tabelle fare clic sulla dinner tabella.

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

  4. 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. È possibile fare clic sull'icona Icona segno più in un nodo per visualizzare altre connessioni, se disponibili.

  5. Fare clic su una freccia che collega 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 flussi di lavoro.

    Grafico di derivazione

  6. Per visualizzare il notebook associato dinner alla tabella, 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.

  7. 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 illustrare la creazione e la visualizzazione della derivazione con un linguaggio diverso, ad esempio Python, seguire questa procedura:

  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 sulla cella e premendo MAIUSC+INVIO o facendo clic Menu Esegui e selezionando Esegui cella.

  3. Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks immettere lineage_data.lineagedemo.price e fare clic su Cerca lineage_data.lineagedemo.price in Databricks.

  4. In Tabelle fare clic sulla price tabella.

  5. Selezionare la scheda Derivazione e fare clic su Visualizza grafico di derivazione. Fare clic sulle Icona segno più icone per esplorare la derivazione dei dati generata dalle query SQL e Python.

    Grafico di derivazione espanso

  6. Fare clic su una freccia che collega 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 flussi di lavoro.

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 illustrare la visualizzazione della derivazione per un flusso di lavoro di Azure Databricks, seguire questa procedura:

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

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

  3. Fai clic su Crea.

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

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. Fare clic su Pianifica nella barra superiore. Nella finestra di dialogo pianificazione selezionare Manuale, selezionare un cluster con accesso a Unity Catalog e fare clic su Crea.

  6. Fare clic su Esegui adesso.

  7. Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks immettere lineage_data.lineagedemo.menu e fare clic su Cerca lineage_data.lineagedemo.menu in Databricks.

  8. In Tabelle Consente di visualizzare tutte le tabelle fare clic sulla menu tabella.

  9. Selezionare la 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 menu tabella.

Acquisire e visualizzare la derivazione del dashboard

Per illustrare la visualizzazione della derivazione per un dashboard SQL, seguire questa procedura:

  1. Passare 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 menu tabella. È anche possibile usare la casella di testo Cerca tabelle nella barra superiore per cercare la menu tabella.
  3. Fare clic su Azioni > Crea un dashboard rapido.
  4. Selezionare le colonne da aggiungere al dashboard e fare clic su Crea.
  5. Nella casella Cerca nella barra superiore dell'area di lavoro di Azure Databricks immettere lineage_data.lineagedemo.menu e fare clic su Cerca lineage_data.lineagedemo.menu in Databricks.
  6. In Tabelle Consente di visualizzare tutte le tabelle fare clic sulla menu tabella.
  7. Selezionare la scheda Derivazione e fare clic su Dashboard. Il nome del 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 BROWSE privilegio o SELECT di una tabella, non può esplorare la derivazione. Inoltre, gli utenti possono visualizzare solo notebook, flussi di lavoro e dashboard autorizzati a visualizzare. Ad esempio, se si eseguono i comandi seguenti per un utente userAnon amministratore:

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 lineage_data.lineagedemo.menu tabella, la tabella verrà visualizzata menu . Non saranno in grado di visualizzare informazioni sulle tabelle associate, ad esempio la tabella downstream lineage_data.lineagedemo.dinner . La dinner tabella viene visualizzata come masked nodo nella visualizzazione su userAe 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 comando seguente per concedere l'autorizzazione BROWSE a un utente userBnon amministratore:

GRANT BROWSE on lineage_data to `userA@company.com`;

userB ora può visualizzare il grafico di derivazione per qualsiasi tabella nello lineage_data schema.

Per altre informazioni sulla gestione dell'accesso a oggetti a protezione diretta nel catalogo unity, vedere Gestire i privilegi nel catalogo unity. Per altre informazioni sulla gestione dell'accesso agli oggetti dell'area di lavoro, ad esempio notebook, flussi di lavoro e dashboard, vedere Elenchi di controllo di accesso.

Eliminare i dati di derivazione

Avviso

Le istruzioni seguenti eliminano tutti gli oggetti archiviati nel catalogo unity. Usare 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.

API di derivazione dei dati

L'API di derivazione dei dati consente di recuperare la derivazione di tabelle e colonne.

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 dinner tabella.

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 dinner tabella.

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"
    }
  ]
}