Référence de tables système de traçabilité

Important

Cette fonctionnalité est disponible en préversion publique.

Cet article fournit une vue d’ensemble des deux tables système de traçabilité. Ces tables système s’appuient sur la fonctionnalité de traçabilité des données d’Unity Catalog, ce qui vous permet d’interroger par programmation des données de traçabilité pour alimenter la prise de décision et les rapports.

Il existe deux tables système de traçabilité :

  • system.access.table_lineage
  • system.access.column_lineage

Remarque

Les deux tables de traçabilité représentent un sous-ensemble de tous les événements en lecture/écriture, car il n’est pas toujours possible de capturer la traçabilité. Les enregistrements sont émis uniquement lorsque la traçabilité peut être déduite.

Table de traçabilité de la table

La table système de traçabilité de la table inclut un enregistrement pour chaque événement de lecture ou d’écriture sur une table ou un chemin d’accès Unity Catalog. Cela inclut, sans s’y limiter, les exécutions de travaux, les exécutions de notebook et les tableaux de bord mis à jour avec l’événement de lecture ou d’écriture.

Table de traçabilité des colonnes

La table de traçabilité des colonnes n’inclut pas d’événements qui n’ont pas de source. Par exemple, si vous insérez dans une colonne en utilisant des valeurs explicites, elle n’est pas capturée. Si vous lisez une colonne, elle est capturée, que vous écriviez ou non la sortie. La traçabilité des colonnes n’est pas prise en charge pour Delta Live Tables.

Schéma de table système de traçabilité

Les tables système de traçabilité utilisent le schéma suivant. Le schéma de traçabilité de la table n’inclut pas source_column_name et target_column_name.

Nom de la colonne Type de données Description Exemple :
account_id string ID d’un compte Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id string ID d’un metastore Unity Catalog. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id string ID de l’espace de travail 123456789012345
entity_type string Type d’entité à partir duquel la transaction de traçabilité a été capturée. La valeur est NOTEBOOK, JOB, PIPELINE, DBSQL_DASHBOARD, DBSQL_QUERY OU NULL. NOTEBOOK
entity_id string Type de l’entité à partir de laquelle la transaction de traçabilité a été capturée. Si entity_type est NULL, entity_id est NULL. * Notebook : 23098402394234
* Travail : 23098402394234
* Requête SQL Databricks : e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Tableaux de bord SQL Databricks : e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Pipeline : e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id string ID pour décrire l’exécution unique de l’entité, ou NULL. Cela diffère pour chaque type d’entité :

* Notebook : command_run_id
* Travail : job_run_id
* Requête SQL Databricks : query_run_id
* Tableau de bord SQL Databricks : query_run_id
* Pipeline : pipeline_update_id

Si entity_type est NULL, entity_run_id est NULL.
* Notebook : 23098402394234
* Travail : 23098402394234
* Requête SQL Databricks : e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Tableaux de bord SQL Databricks : e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Pipeline : e9cd8a31-de2f-4206-adfa-4f6605d68d88
source_table_full_name string Nom en trois parties pour identifier la table source. catalog.schema.table
source_table_catalog string Catalogue de la table source. catalog
source_table_schema string Schéma de la table source. catalog.schema
source_table_name string Nom de la table source. table
source_path string Emplacement dans le stockage cloud de la table source ou chemin d’accès s’il est lu directement à partir du stockage cloud. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type string Type de source. La valeur est TABLE, PATH, VIEW ou STREAMING_TABLE. TABLE
source_column_name string Nom de la colonne source. date
target_table_full_name string Nom en trois parties pour identifier la table cible. catalog.schema.table
target_table_catalog string Catalogue de la table cible. catalog
target_table_schema string Schéma de la table cible. catalog.schema
target_table_name string Nom de la table cible. table
target_path string Emplacement dans le stockage cloud de la table cible. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type string Type de la cible. La valeur est TABLE, PATH, VIEW ou STREAMING TABLE. TABLE
target_column_name string Nom de la colonne cible. date
created_by string Utilisateur qui a généré cette traçabilité. Il peut s’agir d’un nom d’utilisateur Azure Databricks, d’un ID de principal de service Azure Databricks, « Utilisateur système », ou NULL si les informations utilisateur ne peuvent pas être capturées. crampton.rods@email.com
event_time timestamp Timestamp lorsque la traçabilité a été générée. 2023-06-20T19:47:21.194+0000
event_date Date Date à laquelle la traçabilité a été générée. Il s’agit d’une colonne partitionnée. 2023-06-20

Lecture de tables système de traçabilité

Prenez note des considérations suivantes lors de l’analyse des tables système de traçabilité :

  • Pour entity_type, Azure Databricks prend en charge Delta Live Tables, des notebooks, des travaux, des requêtes SQL Databricks et des tableaux de bord. Les événements d’autres entités ne sont pas pris en charge.
  • Si vous voyez comme entity_type, cela signifie qu’aucune nullentité Azure Databricks n’est impliquée dans l’événement. Par exemple, cela peut être le résultat d’une requête JDBC ou d’un utilisateur qui clique sur l’onglet Exemples de données dans l’interface utilisateur Azure Databricks.
  • Pour déterminer si l’événement était une lecture ou une écriture, vous pouvez afficher le type source et le type cible.
    • Lecture seule : le type source n’est pas nul, mais le type cible est nul.
    • Écriture seule : le type source n’est pas nul, mais le type de source est nul.
    • Lecture et écriture : le type source et le type cible ne sont pas nuls.

Exemple de table système de traçabilité

Comme exemple d’enregistrement de la traçabilité dans des tables système, voici un exemple de requête suivi des enregistrements de traçabilité créés par la requête :

CREATE OR REPLACE TABLE car_features
AS SELECT *,  in1+in2 as premium_feature_set
FROM car_features_exterior
JOIN car_features_interior
USING(id, model);

L’enregistrement dans system.access.table_lineage se présente comme suit :

entity_type entity_id source_table_name target_table_name created_by event_time
NOTEBOOK 27080565267 car_features_exterior car_features crampton@email.com 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features crampton@email.com 2023-01-25T16:19:58.908+0000

L’enregistrement dans system.access.column_lineage se présente comme suit :

entity_type entity_id source_table_name target_table_name source_column_name target_column_name event_time
NOTEBOOK 27080565267 car_features_interior car_features in1 premium_feature_set 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features in2 premium_feature_set 2023-01-25T16:19:58.908+0000

Remarque

Toutes les colonnes de traçabilité ne sont pas toutes affichées dans l’exemple ci-dessus. Pour obtenir le schéma complet, consultez le schéma de traçabilité ci-dessus.

Résolution des problèmes liés aux requêtes de table externe

Lorsque vous référencez une table externe à l’aide de son chemin d’accès de stockage cloud, l’enregistrement de traçabilité associé comporte uniquement le nom du chemin d’accès, pas le nom de la table. Par exemple, l’enregistrement de traçabilité de cette requête inclurait le nom du chemin d’accès et non le nom de la table :

SELECT * FROM delta.`abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1`;

Si vous essayez d’interroger des enregistrements de traçabilité pour une table externe référencée par chemin d’accès, vous devez filtrer la requête à l’aide de source_path ou de target_path au lieu de source_table_full_name ou de target_table_full_name. Par exemple, la requête suivante extrait tous les enregistrements de traçabilité d’une table externe :

SELECT *
FROM system.access.table_lineage
WHERE
  source_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1" OR
  target_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1";

Exemple : récupérer des enregistrements de traçabilité en fonction du nom de la table externe

Si vous ne souhaitez pas récupérer manuellement le chemin d’accès de stockage cloud pour rechercher la traçabilité, vous pouvez utiliser la fonction suivante pour obtenir des données de traçabilité à l’aide du nom de la table. Vous pouvez également remplacer system.access.table_lineage par system.access.column_lineage dans la fonction si vous souhaitez interroger la traçabilité des colonnes.

def getLineageForTable(table_name):
  table_path = spark.sql(f"describe detail {table_name}").select("location").head()[0]

  df = spark.read.table("system.access.table_lineage")
  return df.where(
    (df.source_table_full_name == table_name)
    | (df.target_table_full_name == table_name)
    | (df.source_path == table_path)
    | (df.target_path == table_path)
  )

Utilisez ensuite la commande suivante pour appeler la fonction et afficher les enregistrements de traçabilité pour la table externe :

display(getLineageForTable("table_name"))