Configurer l'ingestion de la traçabilité des données pour un service

Vous pouvez activer ou désactiver de manière sélective l'ingestion de traçabilité pour des intégrations spécifiques au niveau du projet, du dossier ou de l'organisation.

Pour en savoir plus sur les intégrations et les scénarios de configuration compatibles, consultez Contrôler l'ingestion de la traçabilité des données.

Prérequis

Pour contrôler l'ingestion de la traçabilité, vous devez utiliser l'API Data Lineage. Assurez-vous d'avoir configuré un projet client pour la facturation et les quotas, car l'API Data Lineage est une API basée sur le client.

Rôles et autorisations

Pour obtenir les autorisations nécessaires pour configurer et contrôler l'ingestion de la traçabilité des données, demandez à votre administrateur de vous accorder les rôles IAM (Identity and Access Management) suivants :

Pour obtenir les autorisations nécessaires pour configurer et contrôler l'ingestion de la traçabilité des données, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ces rôles prédéfinis contiennent les autorisations requises pour configurer et contrôler l'ingestion de la traçabilité des données. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Vous devez disposer des autorisations suivantes pour configurer et contrôler l'ingestion de la traçabilité des données :

  • Obtenir et mettre à jour les configurations de lignée :
    • datalineage.configs.get
    • datalineage.configs.update

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

  1. Activez l'API datalineage.googleapis.com dans votre projet client. Pour en savoir plus, consultez Activer la traçabilité des données.

  2. Définissez le projet client. Pour les exemples suivants, utilisez l'en-tête X-Goog-User-Project. Pour en savoir plus, consultez Paramètres système.

Obtenir la configuration actuelle

Pour vérifier si l'ingestion de la traçabilité est activée pour une ressource ou pour obtenir la valeur etag avant de modifier la configuration, récupérez la configuration actuelle.

C#

C#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de Knowledge Catalog à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Knowledge Catalog pour C#.

Pour vous authentifier auprès de Knowledge Catalog, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

using Google.Cloud.DataCatalog.Lineage.ConfigManagement.V1;

public sealed partial class GeneratedConfigManagementServiceClientSnippets
{
    /// <summary>Snippet for GetConfig</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void GetConfigRequestObject()
    {
        // Create client
        ConfigManagementServiceClient configManagementServiceClient = ConfigManagementServiceClient.Create();
        // Initialize request argument(s)
        GetConfigRequest request = new GetConfigRequest
        {
            ConfigName = ConfigName.FromProjectLocation("[PROJECT]", "[LOCATION]"),
        };
        // Make the request
        Config response = configManagementServiceClient.GetConfig(request);
    }
}

Go

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de Knowledge Catalog à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Knowledge Catalog pour Go.

Pour vous authentifier auprès de Knowledge Catalog, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


//go:build examples

package main

import (
	"context"

	configmanagement "cloud.google.com/go/datacatalog/lineage/configmanagement/apiv1"
	configmanagementpb "cloud.google.com/go/datacatalog/lineage/configmanagement/apiv1/configmanagementpb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := configmanagement.NewClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &configmanagementpb.GetConfigRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/datacatalog/lineage/configmanagement/apiv1/configmanagementpb#GetConfigRequest.
	}
	resp, err := c.GetConfig(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

Java

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de Knowledge Catalog à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Knowledge Catalog pour Java.

Pour vous authentifier auprès de Knowledge Catalog, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.ConfigManagementServiceClient;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.ConfigName;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.GetConfigRequest;

public class SyncGetConfig {

  public static void main(String[] args) throws Exception {
    syncGetConfig();
  }

  public static void syncGetConfig() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (ConfigManagementServiceClient configManagementServiceClient =
        ConfigManagementServiceClient.create()) {
      GetConfigRequest request =
          GetConfigRequest.newBuilder()
              .setName(ConfigName.ofProjectLocationName("[PROJECT]", "[LOCATION]").toString())
              .build();
      Config response = configManagementServiceClient.getConfig(request);
    }
  }
}

Python

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de Knowledge Catalog à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Knowledge Catalog pour Python.

Pour vous authentifier auprès de Knowledge Catalog, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.cloud import datacatalog_lineage_configmanagement_v1


def sample_get_config():
    # Create a client
    client = datacatalog_lineage_configmanagement_v1.ConfigManagementServiceClient()

    # Initialize request argument(s)
    request = datacatalog_lineage_configmanagement_v1.GetConfigRequest(
        name="name_value",
    )

    # Make the request
    response = client.get_config(request=request)

    # Handle the response
    print(response)

gcloud

Pour afficher la configuration actuelle de la traçabilité, utilisez la commande gcloud datalineage config describe. Vous pouvez récupérer la configuration d'un projet, d'un dossier ou d'une organisation.

L'exemple suivant montre comment obtenir la configuration du projet actuel :

gcloud datalineage config describe

Par exemple, pour obtenir la configuration d'un projet spécifique, utilisez l'indicateur --project :

gcloud datalineage config describe --project=PROJECT_ID

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dont vous souhaitez afficher la configuration.

Pour afficher la configuration actuelle d'ingestion de la traçabilité d'un service pour un dossier ou une organisation, remplacez --project=PROJECT_ID par l'une des valeurs suivantes :

  • --folder=FOLDER_ID si vous souhaitez afficher les paramètres d'ingestion de données d'un dossier.
  • --organization=ORGANIZATION_ID si vous souhaitez afficher les paramètres d'ingestion de données pour une organisation.

REST

Pour afficher la configuration actuelle de la traçabilité, utilisez la méthode projects.locations.config.get. Vous pouvez récupérer la configuration d'un projet, d'un dossier ou d'une organisation.

L'exemple suivant montre comment obtenir la configuration d'un projet :

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • CLIENT_PROJECT_ID : ID de votre projet client utilisé pour la facturation ou les quotas.
  • PROJECT_ID : ID du projet dont vous souhaitez afficher la configuration.

Méthode HTTP et URL :

GET https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/global/config

Pour envoyer votre requête, développez l'une des options suivantes :

La commande renvoie l'un des résultats suivants :

  • Si vous ne fournissez aucun paramètre d'ingestion de la traçabilité, vous obtenez un résultat avec un objet ingestion vide :
    {
      "name": "projects/123456789012/locations/global/config",
      "ingestion": {}
    }
      

    Cela signifie que le service utilise le paramètre d'ingestion de la traçabilité par défaut. Dans cet exemple, le paramètre d'ingestion de la traçabilité pour Managed Service pour Apache Spark est enabled.

  • Si vous activez explicitement l'ingestion de la traçabilité, vous obtenez le résultat suivant :
    {
      "name": "projects/123456789012/locations/global/config",
      "ingestion": {
        "rules": [
          {
            "integrationSelector": {
              "integration": "DATAPROC"
            },
            "lineageEnablement": {
              "enabled": true
            }
          }
        ]
      },
      "etag": "1a2b3c4d5e"
    }
      
  • Si l'ingestion de la traçabilité est désactivée, vous obtenez le résultat suivant :
    {
      "name": "projects/123456789012/locations/global/config",
      "ingestion": {
        "rules": [
          {
            "integrationSelector": {
              "integration": "DATAPROC"
            },
            "lineageEnablement": {
              "enabled": false
            }
          }
        ]
      },
      "etag": "1a2b3c4d5e"
    }
      

Pour obtenir la configuration d'un dossier ou d'une organisation, remplacez projects/"PROJECT_ID par folders/FOLDER_ID ou organizations/ORGANIZATION_ID.

Le champ etag de la réponse est une somme de contrôle générée par le serveur en fonction de la valeur actuelle de la configuration. Lorsque vous mettez à jour une configuration à l'aide de la méthode patch, vous pouvez inclure la valeur etag renvoyée par une requête get récente dans le corps de la requête. Si vous fournissez le etag, Knowledge Catalog l'utilise pour vérifier que la configuration n'a pas changé depuis votre dernière requête de lecture. Si les informations ne correspondent pas, la demande de mise à jour échoue. Cela vous empêche de remplacer involontairement les configurations effectuées par d'autres utilisateurs dans les scénarios de lecture-modification-écriture. Si vous ne fournissez pas de etag dans votre requête patch, Knowledge Catalog écrase la configuration de manière inconditionnelle.

Désactiver l'ingestion de traçabilité pour un service

Pour gérer les coûts, appliquer des règles de gouvernance des données ou exclure les projets de développement et autres charges de travail qui ne bénéficient pas du suivi de la traçabilité, désactivez l'ingestion de la traçabilité pour un service.

Java

package com.google.cloud.datacatalog.lineage.configmanagement.v1.samples;

import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule.IntegrationSelector;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule.IntegrationSelector.Integration;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule.LineageEnablement;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.ConfigManagementServiceClient;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.ConfigName;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.GetConfigRequest;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.UpdateConfigRequest;

public class DisableLineageIngestion {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String location = "global";
    disableLineageIngestion(projectId, location);
  }

  // Disables lineage ingestion for a specific service
  // (Managed Service for Apache Spark).
  public static void disableLineageIngestion(String projectId, String location) throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (ConfigManagementServiceClient client = ConfigManagementServiceClient.create()) {
      // Format the resource name.
      String name = ConfigName.ofProjectLocationName(projectId, location).toString();

      Config.Builder configBuilder = Config.newBuilder().setName(name);

      // It is a best practice to read the existing config to preserve other rules
      // and use the etag for optimistic concurrency control.
      try {
        GetConfigRequest getRequest = GetConfigRequest.newBuilder().setName(name).build();
        Config existingConfig = client.getConfig(getRequest);
        configBuilder.mergeFrom(existingConfig);
      } catch (NotFoundException e) {
        // If config doesn't exist, we will proceed by creating a new one.
      }

      // Create an integration selector for the service you want to disable.
      IntegrationSelector selector =
          IntegrationSelector.newBuilder().setIntegration(Integration.DATAPROC).build();

      // Set lineage enablement to false to disable tracking.
      LineageEnablement enablement = LineageEnablement.newBuilder().setEnabled(false).build();

      // Build the ingestion rule.
      IngestionRule disableRule =
          IngestionRule.newBuilder()
              .setIntegrationSelector(selector)
              .setLineageEnablement(enablement)
              .build();

      // Preserve existing rules except for the one we are modifying, then add the new rule.
      // We clear the ingestion block out of the configBuilder entirely to reconstruct it.
      Ingestion.Builder ingestionBuilder = Ingestion.newBuilder();
      if (configBuilder.hasIngestion()) {
        for (IngestionRule rule : configBuilder.getIngestion().getRulesList()) {
          // Keep all existing rules EXCEPT the one targeting DATAPROC
          if (rule.getIntegrationSelector().getIntegration() != Integration.DATAPROC) {
            ingestionBuilder.addRules(rule);
          }
        }
      }
      ingestionBuilder.addRules(disableRule);

      // Update the config builder with the reconstructed ingestion settings.
      configBuilder.setIngestion(ingestionBuilder.build());

      // Build the update request.
      UpdateConfigRequest request = UpdateConfigRequest.newBuilder()
          .setConfig(configBuilder.build())
          .build();

      // Update the config.
      Config response = client.updateConfig(request);
      System.out.printf("Successfully updated config: %s\n", response.getName());
    }
  }
}

Python

from google.api_core.exceptions import NotFound
from google.cloud.datacatalog.lineage import configmanagement_v1

def disable_lineage_ingestion(project_id: str, location: str = "global") -> configmanagement_v1.Config:
    """Disables lineage ingestion for a specific service.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The region location, usually 'global'.

    Returns:
        The updated Configuration object.
    """
    # Initialize client that will be used to send requests.
    client = configmanagement_v1.ConfigManagementServiceClient()

    # The config name format
    name = f"projects/{project_id}/locations/{location}/config"

    try:
        # Retrieve the existing config to preserve other configurations and
        # obtain the latest etag for optimistic concurrency control.
        config = client.get_config(name=name)

        # Filter out existing rules for the integration we are updating
        new_rules = [
            rule for rule in config.ingestion.rules
            if rule.integration_selector.integration != configmanagement_v1.Config.Ingestion.IngestionRule.IntegrationSelector.Integration.DATAPROC
        ]
    except NotFound:
        # If the config does not exist, start fresh
        config = configmanagement_v1.Config(name=name)
        new_rules = []

    # Define the integration to disable tracking for (e.g., DATAPROC).
    integration_selector = configmanagement_v1.Config.Ingestion.IngestionRule.IntegrationSelector(
        integration=configmanagement_v1.Config.Ingestion.IngestionRule.IntegrationSelector.Integration.DATAPROC
    )

    # Set lineage enablement to False to disable tracking.
    lineage_enablement = configmanagement_v1.Config.Ingestion.IngestionRule.LineageEnablement(
        enabled=False
    )

    # Create the ingestion rule.
    disable_rule = configmanagement_v1.Config.Ingestion.IngestionRule(
        integration_selector=integration_selector,
        lineage_enablement=lineage_enablement,
    )
     # Append the new disabling rule and assign it back to the config ingestion rules
    new_rules.append(disable_rule)
    config.ingestion = configmanagement_v1.Config.Ingestion(rules=new_rules)

    # Create the update request using the config (which includes the etag if it existed).
    request = configmanagement_v1.UpdateConfigRequest(
        config=config,
    )

    # Make the request to update the config
    response = client.update_config(request=request)

    print(f"Successfully updated config: {response.name}")
    return response

gcloud

Pour désactiver l'ingestion de la traçabilité pour un service spécifique, utilisez la commande gcloud datalineage config update avec une chaîne JSON intégrée ou un chemin d'accès à un fichier JSON qui définit lineageEnablement.enabled sur false pour le integration spécifique.

L'exemple suivant montre comment désactiver l'ingestion de la traçabilité d'un service pour un projet à l'aide d'une chaîne JSON intégrée :

gcloud datalineage config update --project=PROJECT_ID \
  --config='{
    "ingestion": {
      "rules": [
        {
          "integrationSelector": {
            "integration": "INTEGRATION"
          },
          "lineageEnablement": {
            "enabled": false
          }
        }
      ]
    },
    "etag": "ETAG"
  }'

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dont vous souhaitez mettre à jour la configuration.
  • INTEGRATION : intégration pour laquelle vous avez défini la configuration. Par exemple, DATAPROC ou BIGQUERY.
  • ETAG : valeur etag renvoyée par une requête get récente dans le corps de la requête, utilisée pour vérifier que la configuration n'a pas changé depuis votre dernière requête de lecture.

Pour mettre à jour la configuration à l'aide d'un fichier JSON, exécutez la commande suivante :

gcloud datalineage config update --project=PROJECT_ID --config=CONFIG_FILE

Remplacez les éléments suivants :

  • CONFIG_FILE : chemin d'accès au fichier JSON contenant la configuration.

Pour désactiver l'ingestion de la traçabilité d'un service pour un dossier ou une organisation, remplacez --project=PROJECT_ID par l'une des valeurs suivantes :

  • --folder=FOLDER_ID si vous souhaitez mettre à jour les paramètres d'ingestion de données pour un dossier.
  • --organization=ORGANIZATION_ID si vous souhaitez mettre à jour les paramètres d'ingestion de données pour une organisation.

REST

Pour désactiver l'ingestion de la traçabilité pour un service spécifique, utilisez la méthode projects.locations.config.patch avec une règle d'ingestion qui définit lineageEnablement.enabled sur false pour le integration spécifique.

Pour éviter d'écraser involontairement les configurations effectuées par d'autres utilisateurs dans les scénarios de lecture-modification-écriture, vous pouvez inclure le champ etag dans le corps de la requête. Pour en savoir plus, consultez Obtenir la configuration actuelle.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • CLIENT_PROJECT_ID : ID de votre projet client utilisé pour la facturation ou les quotas.
  • PROJECT_ID : ID du projet dont vous souhaitez mettre à jour la configuration.
  • ETAG : valeur etag renvoyée par une requête get récente.
  • INTEGRATION : integration pour lequel vous avez défini la configuration. Par exemple, DATAPROC.

Méthode HTTP et URL :

PATCH https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/global/config

Corps JSON de la requête :

{
  "ingestion": {
    "rules": [
      {
        "integrationSelector": {
          "integration": "INTEGRATION"
        },
        "lineageEnablement": {
          "enabled": false
        }
      }
    ]
  },
  "etag": "ETAG"
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/PROJECT_ID/locations/global/config",
  "ingestion": {
    "rules": [
      {
        "integrationSelector": {
          "integration": "INTEGRATION"
        },
        "lineageEnablement": {
          "enabled": false
        }
      }
    ]
  },
  "etag": "1a2b3c4d5e"
}

Pour désactiver l'ingestion de la traçabilité pour un dossier ou une organisation, remplacez projects/"PROJECT_ID par folders/FOLDER_ID ou organizations/ORGANIZATION_ID.

Activer l'ingestion de la traçabilité pour un service

Pour reprendre le suivi après l'avoir désactivé ou pour activer une intégration désactivée par défaut, activez l'ingestion de la traçabilité pour un service.

Java

package com.google.cloud.datacatalog.lineage.configmanagement.v1.samples;

import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule.IntegrationSelector;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule.IntegrationSelector.Integration;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.Config.Ingestion.IngestionRule.LineageEnablement;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.ConfigManagementServiceClient;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.ConfigName;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.GetConfigRequest;
import com.google.cloud.datacatalog.lineage.configmanagement.v1.UpdateConfigRequest;

public class EnableLineageIngestion {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String location = "global";
    enableLineageIngestion(projectId, location);
  }

  // Enables lineage ingestion for a specific service
  // (Managed Service for Apache Spark).
  public static void enableLineageIngestion(String projectId, String location) throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (ConfigManagementServiceClient client = ConfigManagementServiceClient.create()) {
      // Format the resource name.
      String name = ConfigName.ofProjectLocationName(projectId, location).toString();

      Config.Builder configBuilder = Config.newBuilder().setName(name);

      // It is a best practice to read the existing config to preserve other rules
      // and use the etag for optimistic concurrency control.
      try {
        GetConfigRequest getRequest = GetConfigRequest.newBuilder().setName(name).build();
        Config existingConfig = client.getConfig(getRequest);
        configBuilder.mergeFrom(existingConfig);
      } catch (NotFoundException e) {
        // If config doesn't exist, we will proceed by creating a new one.
      }

      // Create an integration selector for the service you want to enable (e.g., DATAPROC).
      IntegrationSelector selector =
          IntegrationSelector.newBuilder().setIntegration(Integration.DATAPROC).build();

      // Set lineage enablement to true to enable tracking.
      LineageEnablement enablement = LineageEnablement.newBuilder().setEnabled(true).build();

      // Build the ingestion rule.
      IngestionRule enableRule =
          IngestionRule.newBuilder()
              .setIntegrationSelector(selector)
              .setLineageEnablement(enablement)
              .build();

      // Preserve existing rules except for the one we are modifying, then add the new rule.
      // We clear the ingestion block out of the configBuilder entirely to reconstruct it.
      Ingestion.Builder ingestionBuilder = Ingestion.newBuilder();
      if (configBuilder.hasIngestion()) {
        for (IngestionRule rule : configBuilder.getIngestion().getRulesList()) {
          // Keep all existing rules EXCEPT the one targeting DATAPROC
          if (rule.getIntegrationSelector().getIntegration() != Integration.DATAPROC) {
            ingestionBuilder.addRules(rule);
          }
        }
      }
      ingestionBuilder.addRules(enableRule);

      // Update the config builder with the reconstructed ingestion settings.
      configBuilder.setIngestion(ingestionBuilder.build());

      // Build the update request.
      UpdateConfigRequest request = UpdateConfigRequest.newBuilder()
          .setConfig(configBuilder.build())
          .build();

      // Update the config.
      Config response = client.updateConfig(request);
      System.out.printf("Successfully updated config: %s\n", response.getName());
    }
  }
}

Python

from google.api_core.exceptions import NotFound
from google.cloud.datacatalog.lineage import configmanagement_v1

def enable_lineage_ingestion(project_id: str, location: str = "global") -> configmanagement_v1.Config:
    """Enables lineage ingestion for a specific service like Dataproc
    (Managed Service for Apache Spark).

    Args:
        project_id: The ID of your Google Cloud project.
        location: The region location, usually 'global'.

    Returns:
        The updated Configuration object.
    """
    # Initialize client that will be used to send requests.
    client = configmanagement_v1.ConfigManagementServiceClient()

    # The config name format
    name = f"projects/{project_id}/locations/{location}/config"

    try:
        # Retrieve the existing config to preserve other configurations and
        # obtain the latest etag for optimistic concurrency control.
        config = client.get_config(name=name)

        # Filter out existing rules for the integration we are updating
        new_rules = [
            rule for rule in config.ingestion.rules
            if rule.integration_selector.integration != configmanagement_v1.Config.Ingestion.IngestionRule.IntegrationSelector.Integration.DATAPROC
        ]
    except NotFound:
        # If the config does not exist, start fresh
        config = configmanagement_v1.Config(name=name)
        new_rules = []

    # Define the integration to enable tracking for (e.g., DATAPROC).
    integration_selector = configmanagement_v1.Config.Ingestion.IngestionRule.IntegrationSelector(
        integration=configmanagement_v1.Config.Ingestion.IngestionRule.IntegrationSelector.Integration.DATAPROC
    )

    # Set lineage enablement to True to enable tracking.
    lineage_enablement = configmanagement_v1.Config.Ingestion.IngestionRule.LineageEnablement(
        enabled=True
    )

    # Create the ingestion rule.
    enable_rule = configmanagement_v1.Config.Ingestion.IngestionRule(
        integration_selector=integration_selector,
        lineage_enablement=lineage_enablement,
    )

    # Append the new enabling rule and assign it back to the config ingestion rules
    new_rules.append(enable_rule)
    config.ingestion = configmanagement_v1.Config.Ingestion(rules=new_rules)

    # Create the update request using the config (which includes the etag if it existed).
    request = configmanagement_v1.UpdateConfigRequest(
        config=config,
    )

    # Make the request to update the config
    response = client.update_config(request=request)

    print(f"Successfully updated config: {response.name}")
    return response

gcloud

Pour activer l'ingestion de la traçabilité pour un service spécifique, utilisez la commande gcloud datalineage config update avec une chaîne JSON intégrée ou un chemin d'accès à un fichier JSON qui définit lineageEnablement.enabled sur true pour le integration spécifique. Les intégrations actuelles incluent Managed Service pour Apache Spark, BigQuery et Managed Airflow.

L'exemple suivant montre comment activer l'ingestion de la traçabilité d'un service pour un projet à l'aide d'une chaîne JSON intégrée :

gcloud datalineage config update --project=PROJECT_ID \
  --config='{
    "ingestion": {
      "rules": [
        {
          "integrationSelector": {
            "integration": "INTEGRATION"
          },
          "lineageEnablement": {
            "enabled": true
          }
        }
      ]
    },
    "etag": "ETAG"
  }'

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dont vous souhaitez mettre à jour la configuration.
  • INTEGRATION : intégration pour laquelle vous avez défini la configuration (par exemple, DATAPROC ou BIGQUERY).
  • ETAG : valeur etag renvoyée par une requête get récente dans le corps de la requête, utilisée pour vérifier que la configuration n'a pas changé depuis votre dernière requête de lecture.

Pour mettre à jour la configuration à l'aide d'un fichier JSON, exécutez la commande suivante :

gcloud datalineage config update --project=PROJECT_ID --config=CONFIG_FILE

Remplacez les éléments suivants :

  • CONFIG_FILE : chemin d'accès au fichier JSON contenant la configuration.

Pour activer l'ingestion de la traçabilité d'un service pour un dossier ou une organisation, remplacez --project=PROJECT_ID par l'une des options suivantes :

  • --folder=FOLDER_ID si vous souhaitez mettre à jour les paramètres d'ingestion de données pour un dossier.
  • --organization=ORGANIZATION_ID si vous souhaitez mettre à jour les paramètres d'ingestion de données pour une organisation.

REST

Pour activer l'ingestion de la traçabilité pour un service spécifique, utilisez la méthode projects.locations.config.patch avec une règle d'ingestion qui définit lineageEnablement.enabled sur true pour le integration spécifique.

Pour éviter d'écraser involontairement les configurations effectuées par d'autres utilisateurs dans les scénarios de lecture-modification-écriture, vous pouvez inclure le champ etag dans le corps de la requête. Pour en savoir plus, consultez Obtenir la configuration actuelle.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • CLIENT_PROJECT_ID : ID de votre projet client utilisé pour la facturation ou les quotas.
  • PROJECT_ID : ID du projet dont vous souhaitez mettre à jour la configuration.
  • ETAG : valeur etag renvoyée par une requête get récente.
  • INTEGRATION : integration pour lequel vous avez défini la configuration. Par exemple, DATAPROC.

Méthode HTTP et URL :

PATCH https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/global/config

Corps JSON de la requête :

{
  "ingestion": {
    "rules": [
      {
        "integrationSelector": {
          "integration": "INTEGRATION"
        },
        "lineageEnablement": {
          "enabled": true
        }
      }
    ]
  },
  "etag": "ETAG"
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/PROJECT_ID/locations/global/config",
  "ingestion": {
    "rules": [
      {
        "integrationSelector": {
          "integration": "INTEGRATION"
        },
        "lineageEnablement": {
          "enabled": true
        }
      }
    ]
  },
  "etag": "1a2b3c4d5e"
}

Pour activer l'ingestion de la traçabilité d'un service pour un dossier ou une organisation, remplacez projects/PROJECT_ID par folders/FOLDER_ID ou organizations/ORGANIZATION_ID.

Configurer l'ingestion de la traçabilité pour plusieurs services

Pour configurer l'ingestion de la traçabilité pour plusieurs intégrations simultanément, utilisez les méthodes projects.locations.config.patch, folders.locations.config.patch ou organizations.locations.config.patch. Vous pouvez mettre à jour la configuration au niveau du projet, du dossier ou de l'organisation en définissant plusieurs règles dans le corps de la requête. Pour en savoir plus, consultez Fonctionnement de la configuration de l'ingestion de données pour les intégrations multiservices.

Niveau Organisation

Configurez l'organisation pour activer l'ingestion de la traçabilité pour Managed Service pour Apache Spark :

curl -X PATCH \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
  -H "X-Goog-User-Project: CLIENT_PROJECT_ID" \
  "https://datalineage.googleapis.com/v1/organizations/ORGANIZATION_ID/locations/global/config" \
  -d '{
    "ingestion": {
      "rules": [
        {
          "integrationSelector": {
            "integration": "DATAPROC"
          },
          "lineageEnablement": {
            "enabled": true
          }
        }
      ]
    },
    "etag": "ORGANIZATION_CONFIG_ETAG"
  }'

Remplacez les éléments suivants :

  • ORGANIZATION_ID : ID de l'organisation dont vous souhaitez mettre à jour la configuration.
  • CLIENT_PROJECT_ID : ID de votre projet client utilisé pour la facturation ou les quotas.
  • ORGANIZATION_CONFIG_ETAG : valeur etag renvoyée par une requête get récente pour la configuration de l'organisation.

Niveau Dossier

Configurez le dossier pour activer l'ingestion de la traçabilité pour BigQuery :

curl -X PATCH \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
  -H "X-Goog-User-Project: CLIENT_PROJECT_ID" \
  "https://datalineage.googleapis.com/v1/folders/FOLDER_ID/locations/global/config" \
  -d '{
    "ingestion": {
      "rules": [
        {
          "integrationSelector": {
            "integration": "BIGQUERY"
          },
          "lineageEnablement": {
            "enabled": true
          }
        }
      ]
    },
    "etag": "FOLDER_CONFIG_ETAG"
  }'

Remplacez les éléments suivants :

  • FOLDER_ID : ID du dossier dont vous souhaitez mettre à jour la configuration.
  • CLIENT_PROJECT_ID : ID de votre projet client utilisé pour la facturation ou les quotas.
  • FOLDER_CONFIG_ETAG : valeur etag renvoyée par une récente requête get pour la configuration du dossier.

Niveau Projet

Configurez le projet pour désactiver l'ingestion de la traçabilité pour BigQuery et activer l'ingestion de la traçabilité pour Managed Service pour Apache Airflow simultanément :

curl -X PATCH \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
  -H "X-Goog-User-Project: CLIENT_PROJECT_ID" \
  "https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/global/config" \
  -d '{
    "ingestion": {
      "rules": [
        {
          "integrationSelector": {
            "integration": "BIGQUERY"
          },
          "lineageEnablement": {
            "enabled": false
          }
        },
        {
          "integrationSelector": {
            "integration": "MANAGED_AIRFLOW"
          },
          "lineageEnablement": {
            "enabled": true
          }
        }
      ]
    },
    "etag": "PROJECT_CONFIG_ETAG"
  }'

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dont vous souhaitez mettre à jour la configuration.
  • CLIENT_PROJECT_ID : ID de votre projet client utilisé pour la facturation ou les quotas.
  • PROJECT_CONFIG_ETAG : valeur etag renvoyée par une requête get récente pour la configuration du projet.

Étapes suivantes