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

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 Data Explorer en quasi-temps réel et récupérée avec l’API REST Databricks.

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 30 jours.

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

Spécifications

Les éléments suivants sont nécessaires pour capturer la traçabilité des données avec le catalogue Unity :

  • L’espace de travail doit être compatible avec le Catalogue Unity et être lancé au niveau Premium.
  • Les tables doivent être inscrites dans un metastore Catalogue Unity pour être éligibles à la capture de traçabilité.
  • 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 afficher la traçabilité d’une table ou d’une vue, les utilisateurs doivent avoir le privilège SELECT sur 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é.

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 de 30 jours, celle qui a été collectée il y a plus de 30 jours 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 30 jours.
  • 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é.
  • La traçabilité n’est pas capturée pour les pipelines Delta Live Tables.
  • 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.
  • 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.

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 » pour créer des tables dans le schéma lineagedemo du catalogue lineage_data, un administrateur de metastore 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 Data 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. Accédez à votre page d’arrivée Azure Databricks et basculez vers Science des données & Utilisateur d’ingénierie.

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

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

  4. Cliquez sur Créer.

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

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

  7. Cliquez sur Exécuter maintenant.

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

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

  10. 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’arrivée Azure Databricks et ouvrez Data Explorer en cliquant sur Données 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 SELECT sur une table, il ne pourra 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 USE SCHEMA on lineage_data.lineagedemo to `userA@company.com`;
GRANT SELECT on lineage_data.lineagedemo.menu 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 Contrôle d’accès aux objets d’espace de travail.

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 30 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 <databricks-instance> par le nom de l’instance d’espace de travail Azure Databricks (par exemple, adb-1234567890123456.7.azuredatabricks.net).

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 <databricks-instance> par le nom de l’instance d’espace de travail Azure Databricks (par exemple, adb-1234567890123456.7.azuredatabricks.net).

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