Traçabilité externe¶
La traçabilité externe étend la traçabilité native de Snowflake pour inclure des sources et des destinations de données externes, vous offrant ainsi une visibilité sur les flux de données dans l’ensemble de votre écosystème de données. Elle capture la traçabilité des outils ETL et les bases de données sources pour créer une vue unifiée de la manière dont les données se déplacent dans votre pipeline de données.
OpenLineage est un standard ouvert pour la capture et le partage d’informations sur la traçabilité des données via divers outils et plateformes de données. Snowflake exploite ce cadre en acceptant des événements compatibles avec OpenLineage via un point de terminaison REST. Des outils externes tels que dbt et Apache Airflow peuvent utiliser le point de terminaison pour envoyer des métadonnées de traçabilité à Snowflake, qui incorpore ensuite ces informations dans le graphique de traçabilité native affiché dans Snowsight.
- Point de terminaison REST de traçabilité externe
/api/v2/lineage/external-lineage
- URL de base Snowflake pour les points de terminaison REST
https://<account_identifier>.snowflakecomputing.com
Où
account-identifierest l’identificateur de compte de votre compte Snowflake. Vous pouvez utiliser soit le format de nom d’utilisateur, soit le format de localisateur de compte comme identificateur de compte.Par exemple, si votre identificateur de compte est
myorg-dev_account, alors l’URL de base du point de terminaison de traçabilité externe est :https://myorg-dev_account.snowflakecomputing.com
Workflow de traçabilité externe¶
La mise en œuvre de la traçabilité externe pour un outil de données comprend les tâches suivantes :
Accorder les privilèges nécessaires à l’utilisateur qui s’authentifie auprès du point de terminaison de traçabilité externe.
Configurer votre outil de données pour envoyer des événements OpenLineage au point de terminaison REST Snowflake.
Choisir une méthode d’authentification qui fonctionne pour les APIs REST Snowflake, puis configurer votre outil de données pour qu’il l’utilise pour authentifier ses requêtes vers le point de terminaison de traçabilité externe.
Utilisez votre outil de données comme d’habitude. Les événements OpenLineage sont envoyés automatiquement à Snowflake et apparaissent dans le graphique de traçabilité native dans Snowsight.
Si vous souhaitez tester le point de terminaison de traçabilité externe avant de configurer un outil de données pour qu’il émette des événements OpenLineage, voir Envoyer des requêtes manuelles pour établir la traçabilité.
Afficher votre traçabilité de données¶
Pour voir la traçabilité des données dans Snowsight, procédez comme suit :
Connectez-vous à Snowsight avec les privilèges nécessaires.
Dans le menu de navigation, sélectionnez Catalog » Database Explorer, puis sélectionnez un objet pris en charge, comme une table ou une vue.
Sélectionnez l’onglet Lineage.
Lorsqu’un outil de données envoie des informations de traçabilité à Snowflake, des objets externes apparaissent dans le graphique de traçabilité Snowsight et sont étiquetés comme un nœud externe. Par exemple :
Vous pouvez sélectionner un objet externe ou la ligne reliant les objets pour obtenir des informations supplémentaires, comme vous le faites avec la traçabilité native.
Accorder des privilèges Snowflake¶
Après qu’une requête REST est authentifiée, Snowflake vérifie si l’utilisateur associé à la requête est autorisé à utiliser une traçabilité externe. L’utilisateur associé à la requête doit avoir un rôle auquel est attribué le privilège INGEST LINEAGE sur le compte.
Par exemple, supposons que vous souhaitiez que des requêtes soient envoyées par l’utilisateur du service. dbt_integration_user pour apparaître dans la traçabilité Snowsight. En tant qu’administrateur, exécutez les commandes suivantes pour créer un rôle dédié, lui accorder le privilège nécessaire, puis attribuer le rôle à l’utilisateur :
CREATE ROLE dbt_lineage_role;
GRANT INGEST LINEAGE ON ACCOUNT TO ROLE dbt_lineage_role;
GRANT ROLE dbt_lineage_role TO USER dbt_integration_user;
Configurer votre outil de données¶
Note
Tout outil de données avec une intégration OpenLineage peut être configuré pour envoyer des données de traçabilité à Snowflake. Pour une liste complète des outils qui ont une intégration, voir `Intégrations OpenLineage<https://github.com/OpenLineage/OpenLineage/tree/main/integration#openlineage-integrations>`_.
Les sections suivantes fournissent des instructions de base pour l’utilisation de la traçabilité externe avec dbt et Apache AirFlow.
Configurer dbt pour envoyer des données de traçabilité à Snowflake
Configurer Airflow pour envoyer des données de traçabilité à Snowflake
Configurer dbt pour envoyer des données de traçabilité à Snowflake¶
Note
Configurer dbt pour émettre les événements OpenLineage n’est pas propre à Snowflake ; la seule chose spécifique à Snowflake est le point de terminaison et l’URL de base de traçabilité externe.
Les étapes suivantes fournissent la configuration minimale dont vous avez besoin pour configurer votre environnement dbt. Consultez la documentation OpenLineage dbt et la spécification OpenLineage pour configurer votre intégration OpenLineage-dbt.
Installez l’intégration OpenLineage-dbt :
pip3 install openlineage-dbt
Définissez vos variables de transport pour spécifier une URL de base, un:ref:
point de terminaison <label-external_lineage_endpoint>, et un jeton de sécurité pour la traçabilité externe.Par exemple, si l’identificateur de votre compte est
MYORG-DEV_ACCOUNT, définissez le code suivant dans votre fichier de configuration YAML :transport: type: http url: https://MYORG-DEV_ACCOUNT.snowflakecomputing.com endpoint: /api/v2/lineage/external-lineage auth: type: api_key apiKey: eyJ0eXAiOiJKV1QiLsecuritytoken... compression: gzip
Remplacez les commandes
dbtpardbt-ol. Par exemple, modifiez la commandedbt runendbt-ol run.Ces commandes
dbt-olsont requises par l’intégration OpenLineage-dbt, et ne sont pas propres à Snowflake.
Pour plus d’informations sur les intégrations OpenLineage -dbt, y compris d’autres méthodes de paramétrage des variables, voir la documentation OpenLineage dbt.
Configurer Airflow pour envoyer des données de traçabilité à Snowflake¶
Note
Configurer Apache Airflow pour émettre des événements OpenLineage n’est pas propre à Snowflake ; la seule chose spécifique à Snowflake est le point de terminaison et l’URL de base de traçabilité externe.
Les étapes suivantes fournissent la configuration minimale dont vous avez besoin pour configurer votre environnement Airflow pour Airflow version 2.7+, qui est la version préférée pour OpenLineage. Consultez la documentation OpenLineage Airflow et la spécification OpenLineage pour configurer votre intégration OpenLineage-Airflow.
Installez l’intégration OpenLineage Airflow pour la version 2.7+ :
pip install apache-airflow-providers-openlineage
Si vous utilisez une ancienne version d’Airflow, installez
openlineage-airflowà la place.Définissez vos variables de transport pour spécifier une URL de base, un:ref:
point de terminaison <label-external_lineage_endpoint>, et un jeton de sécurité pour la traçabilité externe.Par exemple, si l’identificateur de votre compte est
MYORG-DEV_ACCOUNT, définissez le code suivant dans votre fichier de configuration YAML :transport: type: http url: https://MYORG-DEV_ACCOUNT.snowflakecomputing.com endpoint: /api/v2/lineage/external-lineage auth: type: api_key apiKey: eyJ0eXAiOiJKV1QiLsecuritytoken... compression: gzip
Pour plus d’informations sur les intégrations OpenLineage-Airflow, y compris d’autres méthodes de paramétrage des variables, voir le chapitre sur la documentation OpenLineage Airflow.
Choisir une méthode d’authentification¶
Snowflake fournit plusieurs méthodes pour authentifier les requêtes vers un point de terminaison REST Snowflake comme celui utilisé par la traçabilité externe. Pour une liste complète des méthodes d’authentification, voir Authentification d”Snowflake REST APIs avec Snowflake.
Après avoir sélectionné votre méthode d’authentification préférée, vous devez générer un jeton de sécurité pour un utilisateur spécifique. Le jeton est utilisé pour associer un utilisateur à la requête REST pour que Snowflake puisse authentifier l’utilisateur et vérifier que l’utilisateur est autorisé à utiliser la traçabilité externe.
Après avoir associé avec succès un utilisateur à un jeton de sécurité dans Snowflake, vous devez configurer votre outil de données pour authentifier ses demandes avec ce jeton. Par exemple, si vous utilisez un fichier de configuration YAML pour définir des variables de transport OpenLineage, utilisez le code suivant pour spécifier le jeton de sécurité qui est envoyé dans l’en-tête de la requête :
transport:
auth:
type: api_key
apiKey: eyJ0eXAiOiJKV1QiLsecuritytoken...
Pour d’autres méthodes de spécification d’un jeton de sécurité, voir la documentation OpenLineage de votre outil de données.
Envoyer des requêtes manuelles pour établir la traçabilité¶
La traçabilité externe fonctionne en acceptant les charges utiles JSON conformes à la spécification OpenLineage pour les événements COMPLETE. Lorsqu’il est intégré à un outil de données, l’outil émet ces événements COMPLETE. Mais vous pouvez aussi construire un événement COMPLETE ; envoyez-le vers le point de terminaison en utilisant un outil ou un langage qui peut envoyer les requêtes POST vers un point de terminaison.
Une requête valide se compose de la méthode suivante, une URL de base, et un point de terminaison :
POST https://<account_identifier>.snowflakecomputing.com/api/v2/lineage/external-lineage
Où account_identifier est l’identificateur de compte de votre compte Snowflake.
L’exemple suivant montre comment utiliser curl pour envoyer des informations de traçabilité à une traçabilité externe :
curl -i -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLsecuritytoken..." \
-H "Accept: application/json" \
-H "User-Agent: myApplicationName/1.0" \
-H "X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT" \
-d "@request_body.json" \
"https://MYORG-DEV_ACCOUNT.snowflakecomputing.com/api/v2/lineage/external-lineage"
Où request_body.json est conforme à la spécification OpenLineage pour les événements COMPLETE. Pour plus d’informations sur cette charge utile JSON, voir Exigences en matière de charge utile.
Exigences en matière de charge utile¶
Lorsque vous envoyez la charge utile JSON dans une requête manuelle vers le point de terminaison de traçabilité externe, la charge utile doit répondre aux exigences suivantes :
Doit être conforme à la spécification OpenLineage.
Doit être un événement COMPLETE. C’est-à-dire que la propriété
eventTypedoit êtreCOMPLETE. Les autres types d’événements sont ignorés.La propriété
inputset la propriétéoutputsdoivent être un mélange de Snowflake et d’objets externes. Vous ne pouvez pas utiliser de traçabilité externe pour établir une traçabilité entre deux objets externes ou entre deux objets Snowflake. Si les deux propriétés spécifient le même type d’objet (Snowflake ou externe), la requête renvoie un code d’état HTTP 404.Doit contenir les propriétés suivantes :
inputsoutputseventTypeeventTimejob
Vous pouvez éventuellement inclure la propriété
run, qui est utile pour identifier la tâche. La charge utile peut contenir des propriétés supplémentaires, mais Snowflake les ignore.
Exemple de charge utile minimale¶
L’exemple suivant montre une charge utile minimale que vous pouvez envoyer au point de terminaison de traçabilité externe :
{
"eventType": "COMPLETE",
"eventTime": "2025-03-12T06:51:12.000Z",
"job": {"namespace": "exampleNamespace", "name": "exampleJob"},
"run": {"runId": "123e4567-e89b-12d3-a456-426614174000"},
"producer": "https://github.com/OpenLineage/OpenLineage/blob/v1-0-0/client",
"schemaURL": "https://openlineage.io/spec/0-0-1/OpenLineage.json",
"inputs": [{"namespace": "snowflake://AXORG-AX_TEST_PP8", "name": "OL_TEST.OL_TEST_SCH.TEST_DEMO"}],
"outputs": [{"namespace": "postgres://localhost:5432", "name": "PDB.SCH.OUTPUT"}]
}
Spécification des types d’objets¶
Dans le tableau outputs de la charge utile, vous pouvez utiliser le champ facets pour spécifier le type de l’objet, qui peut être n’importe quelle chaîne définie par l’utilisateur. Par exemple, l’extrait suivant de la charge utile spécifie que l’objet est de type VIEW :
"outputs": [
{
"namespace": "postgres://db.company.com:5432",
"name": "db.schema.view",
"facets": {"datasetType": {"datasetType": "VIEW"}},
},
],
Si vous ne spécifiez pas de champ facets, le type d’objet est par défaut External Node.
Spécification de plusieurs entrées¶
Si une charge utile comprend plusieurs entrées, la traçabilité en résultant affiche la sortie en tant qu’objet en aval des deux entrées. Par exemple, si une charge utile a une entrée A et B ainsi qu’une sortie C, alors la traçabilité montre à la fois A-C et B-C.
Envoyer des requêtes pour supprimer la traçabilité¶
Vous pouvez envoyer une requête DELETE au point de terminaison de traçabilité externe pour supprimer la traçabilité établie entre un objet Snowflake et un objet externe.
Pour rompre la traçabilité entre l’objet source et l’objet cible, utilisez les paramètres de requête URL pour spécifier les détails des deux objets.
Pour rompre la traçabilité entre un objet et tous ses objets en aval, spécifiez l’objet source sans spécifier d’objet cible.
Pour supprimer un objet cible du graphique de traçabilité, quel que soit le nombre d’objets qui se trouvent en amont, spécifiez l’objet cible sans spécifier d’objet source.
Une requête valide de suppression de traçabilité se compose de la méthode suivante, URL de base et point de terminaison :
DELETE https://<account_identifier>.snowflakecomputing.com/api/v2/lineage/external-lineage
Paramètre de requête |
Description |
|---|---|
|
Espace de noms de l’ensemble de données source. |
|
Nom complet de l’ensemble de données source. |
|
Type de l’ensemble de données source (par exemple, TABLE, VIEW, DATASET). Par défaut, la valeur doit être Nœud externe. Si vous avez fourni une valeur dans le champ |
|
Espace de noms de l’ensemble de données cible. |
|
Nom complet de l’ensemble de données cible. |
|
Type de l’ensemble de données cible (par exemple, TABLE, VIEW, DATASET). Par défaut, la valeur doit être Nœud externe. Si vous avez fourni une valeur dans le champ |
Contrôle d’accès pour la suppression de la traçabilité¶
L’utilisateur qui envoie une requête pour supprimer la traçabilité entre les objets doit avoir le privilège DELETE LINEAGE sur le compte.
Limites et considérations¶
Un objet Snowflake doit être soit l’INPUT ou l’OUTPUT d’un événement COMPLETE. En d’autres termes, la traçabilité externe n’ingère pas d’événements de traçabilité lorsque ni les données d’entrée ni les données de sortie ne sont un objet Snowflake.
Snowflake ne prend pas en charge OpenLineage version 2.
La période de conservation des événements de traçabilité externe est d’un an.
Snowflake ne reconnaît que les événements COMPLETE de traçabilité. Tous les autres événements émis par un outil de données sont ignorés.
La traçabilité de sources externes n’apparaît pas dans la sortie de la fonction GET_LINEAGE.
La traçabilité externe ne prend pas en charge la traçabilité des colonnes.
Le nom complet d’un ensemble de données, c’est-à-dire l’entrée ou la sortie, ne peut pas dépasser 1 000 caractères.
Vous ne pouvez pas stocker plus de 10 000 événements dans le même compte. Si vous atteignez cette limite, vous devrez supprimer des événements avant d’en ajouter de nouveaux.