Capturer et afficher la traçabilité des données avec Unity Catalog

Vous pouvez utiliser le catalogue Unity pour capturer la traçabilité des données du runtime entre les requêtes exécutées sur Azure Databricks. La traçabilité est prise en charge pour toutes les langues et est capturée au niveau de la colonne. Les données de traçabilité incluent des notebooks, des workflows et des tableaux de bord liés à la requête. La traçabilité peut être visualisée dans Catalog Explorer en quasi-temps réel et récupérée avec l’API REST Databricks.

Remarque

Vous pouvez également afficher et interroger des données de traçabilité à l’aide des tables du système de traçabilité (préversion publique). Pour plus d’informations, consultez Référence de tables système de traçabilité.

La traçabilité est agrégée sur tous les espaces de travail attachés à un metastore du catalogue Unity. Cela signifie que la traçabilité capturée dans un espace de travail est visible dans tout autre espace de travail partageant ce metastore. Les utilisateurs doivent disposer des autorisations appropriées pour afficher les données de traçabilité. Les données de traçabilité sont conservées pendant un an.

Cet article décrit la visualisation de la traçabilité à l’aide de Catalog Explorer et de l’API REST.

Spécifications

Les éléments suivants sont nécessaires pour capturer la traçabilité des données en utilisant Unity Catalog :

  • L'espace de travail doit avoir Unity Catalog activé.

  • Les tables doivent être inscrites dans un metastore Catalogue Unity.

  • Les requêtes doivent utiliser le DataFrame Spark (par exemple, les fonctions Spark SQL qui retournent un DataFrame) ou les interfaces SQL Databricks. Pour obtenir des exemples de requêtes SQL Databricks et PySpark, consultez Exemples.

  • Pour voir la traçabilité d’une table ou d’une vue, les utilisateurs doivent avoir au moins le privilège BROWSE sur le catalogue parent de la table ou la vue.

  • Pour afficher des informations de traçabilité pour les notebooks, les workflows ou les tableaux de bord, les utilisateurs doivent disposer d’autorisations sur ces objets, comme défini par les paramètres de contrôle d’accès dans l’espace de travail. Consultez Autorisations de traçabilité.

  • Pour afficher la traçabilité d’un pipeline avec Unity Catalog, vous devez disposer des autorisations CAN_VIEW sur le pipeline.

  • Il est possible que vous deviez mettre à jour vos règles de pare-feu sortantes pour la connectivité au point de terminaison Event Hub dans le plan de contrôle Azure Databricks. Cela s’applique généralement si votre espace de travail Azure Databricks est déployé dans votre propre réseau virtuel (également appelé injection de réseau virtuel). Pour obtenir le point de terminaison Event Hub pour la région de votre espace de travail, consultez Metastore, stockage Blob des artefacts, stockage Blob des tables système, stockage Blob des journaux et adresses IP des points d’extrémité du Hub d’événements. Si vous souhaitez obtenir plus d’informations sur la configuration de routages définis par l’utilisateur (UDR) pour Azure Databricks, consultez Paramètres de routage définis par l’utilisateur pour Azure Databricks.

Limites

  • La diffusion en continu entre les tables Delta est prise en charge uniquement dans Databricks Runtime 11.3 LTS ou version ultérieure.

  • Comme la traçabilité est calculée sur une fenêtre glissante d’un an, celle qui a été collectée il y a plus d’un an n’est pas affichée. Par exemple, si un travail ou une requête lit des données de la table A et écrit dans la table B, le lien entre la table A et la table B s’affiche seulement pendant un an.

    Vous pouvez filtrer les données de traçabilité par intervalle de temps. Lorsque l’option « Toute la traçabilité » est sélectionnée, les données de traçabilité collectées à partir de juin 2023 sont affichées.

  • Les workflows qui utilisent la requête runs submit de l’API Travaux ne sont pas disponibles lors de l’affichage de la traçabilité. La traçabilité au niveau de la table et de la colonne est toujours capturée lors de l’utilisation de la requête runs submit, mais le lien vers l’exécution n’est pas capturé.

  • Unity Catalog capture autant que possible la traçabilité au niveau des colonnes. Toutefois, dans certains cas, la traçabilité au niveau des colonnes ne peut pas être capturée.

  • La traçabilité des colonnes est prise en charge uniquement lorsque la source et la cible sont référencées par nom de table (exemple : select * from <catalog>.<schema>.<table>). La traçabilité des colonnes ne peut pas être capturée si la source ou la cible sont traitées par chemin d’accès (exemple : select * from delta."s3://<bucket>/<path>").

  • La traçabilité des données ne capture pas les lectures sur les tables avec des masques de colonne. Consultez Filtrer les données de table sensibles à l’aide de filtres de lignes et de masques de colonne.

  • Si une table est renommée, la traçabilité n’est pas capturée pour la table renommée.

  • Si vous utilisez des points de contrôle de jeu de données Spark SQL, la traçabilité n’est pas capturée. Consultez pyspark.sql.DataFrame.checkpoint dans la documentation Apache Spark.

  • Unity Catalog capture la traçabilité à partir de pipelines Delta Live Tables dans la plupart des cas. Toutefois, dans certains cas, la couverture complète de traçabilité ne peut pas être garantie, par exemple lorsque les pipelines utilisent le APPLIQUER LES MODIFICATIONS API ou tables TEMPORAIRES.

Exemples

Notes

  • Les exemples suivants utilisent le nom de catalogue lineage_data et le nom de schéma lineagedemo. Pour utiliser un autre catalogue et schéma, modifiez les noms utilisés dans les exemples.

  • Pour terminer cet exemple, vous devez disposer de privilèges CREATE et USE SCHEMA sur un schéma. Un administrateur de metastore, le propriétaire du catalogue ou encore du schéma peut vous octroyer ces privilèges. Par exemple, pour accorder à tous les utilisateurs du groupe l’autorisation « data_engineers » l’autorisation de créer des tables dans le schéma lineagedemo du catalogue lineage_data, un utilisateur qui dispose de l’un des privilèges ou rôles ci-dessus peut exécuter les requêtes suivantes :

    CREATE SCHEMA lineage_data.lineagedemo;
    GRANT USE SCHEMA, CREATE on SCHEMA lineage_data.lineagedemo to `data_engineers`;
    

Capturer et explorer la traçabilité

Pour capturer des données de traçabilité, procédez comme suit :

  1. Accédez à la page d’arrivée Azure Databricks, cliquez sur Nouvelle icôneNouveau dans la barre latérale et sélectionnez Notebook dans le menu.

  2. Entrez un nom pour le notebook et sélectionnez SQL dans Langue par défaut.

  3. Dans Cluster, sélectionnez un cluster avec accès à Unity Catalog.

  4. Cliquez sur Créer.

  5. Dans la première cellule du notebook, entrez les requêtes suivantes :

    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. Pour exécuter les requêtes, cliquez dans la cellule et appuyez sur Maj+Entrée ou cliquez sur le menu Exécuter et sélectionnez Exécuter la cellule.

Pour utiliser Catalog Explorer pour afficher la traçabilité générée par ces requêtes, procédez comme suit :

  1. Dans la zone Rechercher dans la barre supérieure de l’espace de travail Azure Databricks, entrez lineage_data.lineagedemo.dinner et cliquez sur Rechercher lineage_data.lineagedemo.dinner dans Databricks.

  2. Sous Tables, cliquez sur la tabledinner.

  3. Sélectionnez l’onglet Traçabilité . Le panneau de traçabilité s’affiche et affiche les tables associées (pour cet exemple, il s’agit de la menu table).

  4. Pour afficher un graphique interactif de la traçabilité des données, cliquez sur Afficher le graphique de traçabilité. Par défaut, un niveau est affiché dans le graphique. Vous pouvez cliquer sur l’icône Icône de signe Plus sur un nœud pour afficher d’autres connexions si elles sont disponibles.

  5. Cliquez sur une flèche reliant des nœuds dans le graphique de traçabilité pour ouvrir le panneau Connexion de traçabilité. Le panneau Connexion de traçabilité affiche des détails sur la connexion, notamment les tables source et cible, les notebooks et les workflows.

    Graphique Traçabilité

  6. Pour afficher le notebook associé à la table dinner, sélectionnez le notebook dans le panneau Connexion de traçabilité ou fermez le graphique de traçabilité, puis cliquez sur Notebooks. Pour ouvrir le notebook dans un nouvel onglet, cliquez sur le nom du notebook.

  7. Pour afficher la traçabilité au niveau de la colonne, cliquez sur une colonne dans le graphique pour afficher des liens vers des colonnes associées. Par exemple, le fait de cliquer sur la colonne « full_menu » affiche les colonnes en amont dont la colonne a été dérivée :

    Traçabilité des colonnes du menu complet

Pour illustrer la création et l’affichage de la traçabilité avec un autre langage, par exemple Python, procédez comme suit :

  1. Ouvrez le notebook que vous avez créé précédemment, créez une cellule et entrez le code Python suivant :

    %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. Exécutez la cellule en cliquant dedans et en appuyant sur Maj+Entrée ou sur le menu Exécuter et en sélectionnant Exécuter la cellule.

  3. Dans la zone Rechercher dans la barre supérieure de l’espace de travail Azure Databricks, entrez lineage_data.lineagedemo.price et cliquez sur Rechercher lineage_data.lineagedemo.price dans Databricks.

  4. Sous Tables, cliquez sur la tableprice.

  5. Sélectionnez l’onglet Traçabilité, puis cliquez sur Afficher le graphique de traçabilité. Cliquez sur les icônes Icône de signe Plus pour explorer la traçabilité des données générées par les requêtes SQL et Python.

    Graphique de traçabilité étendu

  6. Cliquez sur une flèche reliant des nœuds dans le graphique de traçabilité pour ouvrir le panneau Connexion de traçabilité. Le panneau Connexion de traçabilité affiche des détails sur la connexion, notamment les tables source et cible, les notebooks et les workflows.

Traçabilité des workflows de capture et d’affichage

La traçabilité est également capturée pour tout workflow qui lit ou écrit dans Unity Catalog. Pour illustrer l’affichage de la traçabilité d’un flux de travail Azure Databricks, procédez comme suit :

  1. Cliquez sur Nouvelle icôneNouveau dans la barre latérale, puis sélectionnez Notebook dans le menu.

  2. Entrez un nom pour le notebook et sélectionnez SQL dans Langue par défaut.

  3. Cliquez sur Créer.

  4. Dans la première cellule du notebook, entrez la requête suivante :

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. Cliquez sur Planifier dans la barre supérieure. Dans la boîte de dialogue Planification, sélectionnez Manuel, sélectionnez un cluster avec accès à Unity Catalog, puis cliquez sur Créer.

  6. Cliquez sur Exécuter maintenant.

  7. Dans la zone Rechercher dans la barre supérieure de l’espace de travail Azure Databricks, entrez lineage_data.lineagedemo.menu et cliquez sur Rechercher lineage_data.lineagedemo.menu dans Databricks.

  8. Sous Tables Afficher toutes les tables, cliquez sur la tablemenu.

  9. Sélectionnez l’onglet Traçabilité, cliquez sur Workflows, puis sélectionnez l’onglet En aval. Le nom du travail apparaît sous Nom du travail en tant que consommateur de la table menu.

Capturer et afficher la traçabilité du tableau de bord

Pour illustrer l’affichage de la traçabilité pour un tableau de bord SQL, procédez comme suit :

  1. Accédez à votre page d’accueil Azure Databricks et ouvrez l’explorateur de catalogue en cliquant sur Catalogue dans la barre latérale.
  2. Cliquez sur le nom du catalogue, cliquez sur lineagedemo, puis sélectionnez la table menu. Vous pouvez également utiliser la zone de texte Rechercher dans les tables dans la barre supérieure pour rechercher la table menu.
  3. Cliquez sur Actions > Créer un tableau de bord rapide.
  4. Sélectionnez des colonnes à ajouter au tableau de bord, puis cliquez sur Créer.
  5. Dans la zone Rechercher dans la barre supérieure de l’espace de travail Azure Databricks, entrez lineage_data.lineagedemo.menu et cliquez sur Rechercher lineage_data.lineagedemo.menu dans Databricks.
  6. Sous Tables Afficher toutes les tables, cliquez sur la tablemenu.
  7. Sélectionnez l’onglet Traçabilité, puis cliquez sur Tableaux de bord. Le nom du tableau de bord apparaît sous Nom du tableau de bord en tant que consommateur de la table de menus.

Autorisations de traçabilité

Les graphiques de traçabilité partagent le même modèle d’autorisation que le Catalogue Unity. Si un utilisateur n’a pas le privilège BROWSE ou SELECT sur une table, il ne peut pas explorer la traçabilité. En outre, les utilisateurs peuvent uniquement voir des notebooks, des workflows et des tableaux de bord qu’ils ont l’autorisation d’afficher. Par exemple, si vous exécutez les commandes suivantes pour un utilisateur non-administrateur userA :

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

Lorsque userA affiche le graphique de traçabilité de la table lineage_data.lineagedemo.menu, il voit la table menu, mais ne peut pas voir d’informations sur les tables associées, par exemple la table lineage_data.lineagedemo.dinner en aval. La table dinner est affichée en tant que nœud masked dans l’affichage de userA et userA ne peut pas développer le graphique pour révéler les tables en aval des tables auxquelles il n’a pas l’autorisation d’accéder.

Pour plus d’informations sur la gestion de l’accès aux objets sécurisables dans Unity Catalog, consultez Gérer les privilèges dans Unity Catalog. Pour plus d’informations sur la gestion de l’accès aux objets d’espace de travail comme les notebooks, les workflows et les tableaux de bord, consultez Vue d’ensemble du contrôle d'accès.

Supprimer des données de traçabilité

Avertissement

Les instructions suivantes suppriment tous les objets stockés dans le catalogue Unity. Utilisez ces instructions uniquement si nécessaire. Par exemple, pour répondre aux exigences de conformité.

Pour supprimer des données de traçabilité, vous devez supprimer le metastore qui gère les objets Catalogue Unity. Pour plus d’informations sur la suppression du métastore, consultez Supprimer un métastore. Les données seront supprimées dans les 90 jours.

API de traçabilité des données

L’API de traçabilité des données vous permet de récupérer la traçabilité de table et de colonne.

Important

Pour accéder aux API REST Databricks, vous devez vous authentifier.

Récupérer la traçabilité de la table

Cet exemple récupère les données de traçabilité pour la table dinner.

Requête

curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<databricks-instance/api/2.0/lineage-tracking/table-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "include_entity_lineage": true}}'

Remplacez <get-workspace-instance>.

Cet exemple utilise un fichier .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
        }
      ]
    }
  ]
}

Récupérer la traçabilité des colonnes

Cet exemple récupère les données de colonne pour la table dinner.

Requête

curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<databricks-instance/api/2.0/lineage-tracking/column-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "column_name": "dessert"}}'

Remplacez <get-workspace-instance>.

Cet exemple utilise un fichier .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"
    }
  ]
}