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

Cet article décrit comment capturer et visualiser la traçabilité des données en tirant parti de Catalog Explorer (Explorateur de catalogues), des tables système de traçabilité des données et l’API REST.

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 les notebooks, les travaux et les tableaux de bord liés à la requête. Vous pouvez visualiser la traçabilité dans Catalog Explorer en quasi-temps réel et récupérée de manière programmatique en utilisant les tables système de traçabilité et 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 un an.

L’image suivante est un exemple de graphique de traçabilité. Les fonctionnalités et exemples spécifiques de traçabilité des données sont traités plus loin dans cet article.

Vue d’ensemble de la traçabilité

Pour plus d’informations sur le suivi de la traçabilité d’un modèle Machine Learning, consultez Suivre la traçabilité des données d’un modèle dans Unity Catalog.

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. Le catalogue parent doit également être accessible à partir de l’espace de travail. Consultez Limiter l’accès au catalogue à des espaces de travail spécifiques.

  • Pour afficher des informations de traçabilité pour les notebooks, les travaux 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.

  • Le suivi de la traçabilité de la diffusion en continu entre les tables Delta nécessite Databricks Runtime 11.3 LTS ou une version ultérieure.

  • Le suivi de la traçabilité des colonnes pour les charges de travail Delta Live Tables nécessite Databricks Runtime 13.3 LTS ou une version ultérieure.

  • Il est possible que vous deviez mettre à jour vos règles de pare-feu sortantes pour autoriser la connectivité au point de terminaison Event Hubs 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 Hubs 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 de terminaison Event Hubs. 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.

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é :

  1. Accédez à votre page d’accueil Azure Databricks, cliquez sur Nouvelle icône Nouveau 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. 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 afin d’afficher la traçabilité générée par ces requêtes :

  1. Dans la zone Rechercher dans la barre supérieure de l’espace de travail Azure Databricks, recherchez la table lineage_data.lineagedemo.dinner et sélectionnez-la.

  2. 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).

  3. 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. Cliquez sur l’icône Icône de signe Plus d’un nœud pour afficher davantage de connexions si elles sont disponibles.

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

    Graphique Traçabilité

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

  6. Pour afficher la traçabilité au niveau de la colonne, cliquez sur une colonne du 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 afficher la traçabilité à l’aide d’un autre langage, par exemple, Python :

  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, recherchez la table lineage_data.lineagedemo.price et sélectionnez-la.

  4. Accédez à l’onglet Traçabilité, puis cliquez sur Afficher le graphique de traçabilité. Cliquez sur les icônes Icône de signe Plus pour découvrir la traçabilité des données générée par les requêtes.

    Graphique de traçabilité étendu

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

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 afficher la traçabilité d’un flux de travail Azure Databricks :

  1. Cliquez sur Nouvelle icône Nouveau 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, recherchez la table lineage_data.lineagedemo.menu et sélectionnez-la.

  8. Sous l’onglet Traçabilité, cliquez sur Flux de travail, 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 créer un tableau de bord et afficher sa traçabilité des données :

  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 Rechercher dans la barre supérieure pour rechercher la table menu.

  3. Cliquez sur Ouvrir dans un tableau de bord.

  4. Sélectionnez les colonnes que vous souhaitez ajouter au tableau de bord, puis cliquez sur Créer.

  5. Publier le tableau de bord.

    Seuls les tableaux de bord publiés sont suivis dans la traçabilité des données.

  6. Dans la zone Rechercher dans la barre supérieure, recherchez la table lineage_data.lineagedemo.menu et sélectionnez-la.

  7. Sous l’onglet Traçabilité, cliquez sur Tableaux de bord. Le 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 travaux 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 graphe de traçabilité de la table lineage_data.lineagedemo.menu, ils voient s’afficher la table menu. Ils ne vont pas pouvoir consulter les informations sur les tables connexes, telles que 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.

Si vous exécutez la commande suivante pour accorder l’autorisation BROWSE à un utilisateur non administrateur userB :

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

userB peut maintenant afficher le graphique de traçabilité pour n’importe quelle table du schéma lineage_data.

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 de l’espace de travail comme les notebooks, les travaux et les tableaux de bord, consultez Listes de 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.

Interroger des données de traçabilité en tirant parti de tables système

Vous pouvez utiliser les tables système de traçabilité pour interroger les données de traçabilité de manière programmatique. Pour obtenir des instructions détaillées, consultez Analyser l’utilisation avec les tables système et Informations de référence sur les tables système de traçabilité.

Si votre espace de travail se situe dans une région qui ne prend pas en charge les tables système de traçabilité, vous pouvez également utiliser l’API REST Traçabilité des données pour récupérer les données de traçabilité de manière programmatique.

Récupérer la traçabilité à l’aide de l’API REST 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. Toutefois, si votre espace de travail se situe dans une région qui prend en charge les tables système de traçabilité, vous devez utiliser des requêtes de table système au lieu de l’API REST. Les tables système constituent une meilleure option pour la récupération programmatique des données de traçabilité. La majorité des régions prennent en charge les tables système de traçabilité.

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://<workspace-instance>/api/2.0/lineage-tracking/table-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "include_entity_lineage": true}'

Remplacez <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://<workspace-instance>/api/2.0/lineage-tracking/column-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "column_name": "dessert"}'

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

Limites

  • La traçabilité étant calculée sur une fenêtre glissante d’un an, les données de traçabilité collectées il y a plus d’un an ne sont pas affichées. Par exemple, si une tâche ou une requête lit des données dans la table A et les écrit dans la table B, le lien entre les tables A et B est uniquement affiché pour une année. Vous pouvez filtrer les données de traçabilité par intervalle de temps sur une période d’un an.
  • Les travaux 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 uniquement prise en charge lorsque la source et la cible sont référencées par le nom de la 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>").
  • Si une table est renommée, la traçabilité n’est pas capturée pour la table ou la vue renommées.
  • Si un schéma ou un catalogue est renommé, la traçabilité n’est pas capturée pour les tables et les vues sous le catalogue ou le schéma renommés.
  • Si vous utilisez des points de contrôle de jeu de données Spark SQL, la traçabilité n’est pas capturée.
  • 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.
  • La traçabilité ne capture pas les fonctions Stack.
  • Les vues temporaires globales ne sont pas capturées dans la traçabilité.
  • Les tables sous system.information_schema ne sont pas capturées dans la traçabilité.