Erfassung von Datenherkunft für einen Dienst konfigurieren

Sie können die Aufnahme von Herkunftsdaten für bestimmte Integrationen auf Projekt-, Ordner- oder Organisationsebene selektiv aktivieren oder deaktivieren.

Weitere Informationen zu unterstützten Integrationen und Konfigurationsszenarien finden Sie unter Datenherkunftserfassung steuern.

Vorbereitung

Wenn Sie die Datenaufnahme steuern möchten, müssen Sie die Data Lineage API verwenden. Achten Sie darauf, dass Sie ein Clientprojekt für Abrechnung und Kontingente konfiguriert haben, da die Data Lineage API eine clientbasierte API ist.

Rollen und Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen (Identity and Access Management) zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren und Steuern der Datenherkunftsaufnahme benötigen:

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren und Steuern der Datenherkunftsaufnahme benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Konfigurieren und Steuern der Datenherkunftsaufnahme erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um die Datenherkunftserfassung zu konfigurieren und zu steuern:

  • Konfigurationen für die Herkunft abrufen und aktualisieren:
    • datalineage.configs.get
    • datalineage.configs.update

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

  1. Aktivieren Sie die datalineage.googleapis.com API in Ihrem Clientprojekt. Weitere Informationen finden Sie unter Datenherkunft aktivieren.

  2. Legen Sie das Clientprojekt fest. Verwenden Sie für die folgenden Beispiele den Header X-Goog-User-Project. Weitere Informationen finden Sie unter Systemparameter.

Aktuelle Konfiguration abrufen

Wenn Sie prüfen möchten, ob die Aufnahme von Herkunftsdaten für eine Ressource aktiviert ist, oder wenn Sie den Wert etag abrufen möchten, bevor Sie die Konfiguration ändern, rufen Sie die aktuelle Konfiguration ab.

C#

C#

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für C# in der Kurzanleitung zur Verwendung von Clientbibliotheken für Knowledge Catalog. Weitere Informationen finden Sie in der API-Referenzdokumentation für Knowledge Catalog C#.

Richten Sie zur Authentifizierung bei Knowledge Catalog Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Go in der Kurzanleitung zur Verwendung von Clientbibliotheken für Knowledge Catalog. Weitere Informationen finden Sie in der API-Referenzdokumentation für Knowledge Catalog Go.

Richten Sie zur Authentifizierung bei Knowledge Catalog Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


//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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung zur Verwendung von Clientbibliotheken für Knowledge Catalog. Weitere Informationen finden Sie in der API-Referenzdokumentation für Knowledge Catalog Java.

Richten Sie zur Authentifizierung bei Knowledge Catalog Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Kurzanleitung zur Verwendung von Clientbibliotheken für Knowledge Catalog. Weitere Informationen finden Sie in der API-Referenzdokumentation für Knowledge Catalog Python.

Richten Sie zur Authentifizierung bei Knowledge Catalog Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

# 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

Verwenden Sie den Befehl gcloud datalineage config describe, um die aktuelle Herkunftskonfiguration aufzurufen. Sie können die Konfiguration für ein Projekt, einen Ordner oder eine Organisation abrufen.

Im folgenden Beispiel wird gezeigt, wie Sie die Konfiguration für das aktuelle Projekt abrufen:

gcloud datalineage config describe

Wenn Sie beispielsweise die Konfiguration für ein bestimmtes Projekt abrufen möchten, verwenden Sie das Flag --project:

gcloud datalineage config describe --project=PROJECT_ID

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, dessen Konfiguration Sie aufrufen möchten.

Wenn Sie die aktuelle Konfiguration für die Datenaufnahme eines Dienstes für einen Ordner oder eine Organisation aufrufen möchten, ersetzen Sie --project=PROJECT_ID durch einen der folgenden Werte:

  • --folder=FOLDER_ID, wenn Sie die Einstellungen für die Datenaufnahme für einen Ordner aufrufen möchten.
  • --organization=ORGANIZATION_ID, wenn Sie die Einstellungen für die Datenaufnahme für eine Organisation aufrufen möchten.

REST

Verwenden Sie die Methode projects.locations.config.get, um die aktuelle Herkunftskonfiguration aufzurufen. Sie können die Konfiguration für ein Projekt, einen Ordner oder eine Organisation abrufen.

Im folgenden Beispiel wird gezeigt, wie Sie die Konfiguration für ein Projekt abrufen:

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • CLIENT_PROJECT_ID: Die ID Ihres Clientprojekts, das für die Abrechnung oder Kontingente verwendet wird.
  • PROJECT_ID: Die ID des Projekts, dessen Konfiguration Sie aufrufen möchten.

HTTP-Methode und URL:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Der Befehl gibt eine der folgenden Ausgaben zurück:

  • Wenn Sie keine Einstellungen für die Herkunftsaufnahme angeben, erhalten Sie eine Ausgabe mit einem leeren ingestion-Objekt:
    {
      "name": "projects/123456789012/locations/global/config",
      "ingestion": {}
    }
      

    Das bedeutet, dass der Dienst die Standardeinstellung für die Herkunftsaufnahme verwendet. In diesem Beispiel ist die Einstellung für die Aufnahme von Herkunftsdaten für Managed Service for Apache Spark enabled.

  • Wenn Sie die Aufnahme von Herkunftsdaten explizit aktivieren, erhalten Sie die folgende Ausgabe:
    {
      "name": "projects/123456789012/locations/global/config",
      "ingestion": {
        "rules": [
          {
            "integrationSelector": {
              "integration": "DATAPROC"
            },
            "lineageEnablement": {
              "enabled": true
            }
          }
        ]
      },
      "etag": "1a2b3c4d5e"
    }
      
  • Wenn die Aufnahme von Herkunftsdaten deaktiviert ist, erhalten Sie die folgende Ausgabe:
    {
      "name": "projects/123456789012/locations/global/config",
      "ingestion": {
        "rules": [
          {
            "integrationSelector": {
              "integration": "DATAPROC"
            },
            "lineageEnablement": {
              "enabled": false
            }
          }
        ]
      },
      "etag": "1a2b3c4d5e"
    }
      

Wenn Sie die Konfiguration für einen Ordner oder eine Organisation abrufen möchten, ersetzen Sie projects/PROJECT_ID durch folders/FOLDER_ID oder organizations/ORGANIZATION_ID.

Das Feld etag in der Antwort ist eine Prüfsumme, die vom Server basierend auf dem aktuellen Wert der Konfiguration generiert wird. Wenn Sie eine Konfiguration mit der Methode patch aktualisieren, können Sie den Wert etag, der von einer kürzlich ausgeführten get-Anfrage zurückgegeben wurde, in den Anfragetext einfügen. Wenn Sie den etag angeben, wird er von Knowledge Catalog verwendet, um zu prüfen, ob sich die Konfiguration seit Ihrer letzten Leseanfrage geändert hat. Wenn die Werte nicht übereinstimmen, schlägt die Aktualisierungsanfrage fehl. So wird verhindert, dass Sie in Szenarien mit Lesen, Ändern und Schreiben versehentlich Konfigurationen überschreiben, die von anderen Nutzern vorgenommen wurden. Wenn Sie in Ihrer patch-Anfrage keinen etag angeben, überschreibt Knowledge Catalog die Konfiguration bedingungslos.

Herkunftsaufnahme für einen Dienst deaktivieren

Wenn Sie Kosten verwalten, Richtlinien zur Data Governance erzwingen oder Entwicklungsprojekte und andere Arbeitslasten ausschließen möchten, die nicht von der Herkunftsverfolgung profitieren, deaktivieren Sie die Herkunftsaufnahme für einen Dienst.

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

Wenn Sie die Aufnahme von Herkunftsdaten für einen bestimmten Dienst deaktivieren möchten, verwenden Sie den Befehl gcloud datalineage config update mit einem Inline-JSON-String oder einem Pfad zu einer JSON-Datei, die lineageEnablement.enabled für den jeweiligen integration auf false setzt.

Im folgenden Beispiel wird gezeigt, wie Sie die Datenaufnahme für die Herkunft eines Dienstes für ein Projekt mithilfe eines Inline-JSON-Strings deaktivieren:

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, dessen Konfiguration Sie aktualisieren möchten.
  • INTEGRATION: Die Integration, für die Sie die Konfiguration festlegen. Beispiel: DATAPROC oder BIGQUERY
  • ETAG: Der etag-Wert, der von einer kürzlich erfolgten get-Anfrage im Anfragetext zurückgegeben wurde. Er wird verwendet, um zu prüfen, ob sich die Konfiguration seit Ihrer letzten Leseanfrage geändert hat.

Führen Sie den folgenden Befehl aus, um die Konfiguration mithilfe einer JSON-Datei zu aktualisieren:

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

Ersetzen Sie Folgendes:

  • CONFIG_FILE: Der Pfad zur JSON-Datei, die die Konfiguration enthält.

Wenn Sie die Aufnahme von Herkunftsdaten eines Dienstes für einen Ordner oder eine Organisation deaktivieren möchten, ersetzen Sie --project=PROJECT_ID durch eine der folgenden Optionen:

  • --folder=FOLDER_ID, wenn Sie die Einstellungen für die Datenaufnahme für einen Ordner aktualisieren möchten.
  • --organization=ORGANIZATION_ID, wenn Sie die Einstellungen für die Datenaufnahme für eine Organisation aktualisieren möchten.

REST

Wenn Sie die Aufnahme von Herkunftsdaten für einen bestimmten Dienst deaktivieren möchten, verwenden Sie die Methode projects.locations.config.patch mit einer Aufnahmeregel, die lineageEnablement.enabled für den jeweiligen integration auf false setzt.

Wenn Sie verhindern möchten, dass Konfigurationen, die von anderen Nutzern in Szenarien mit Lesevorgängen, Änderungen und Schreibvorgängen vorgenommen wurden, versehentlich überschrieben werden, können Sie das Feld etag in den Anfragetext einfügen. Weitere Informationen finden Sie unter Aktuelle Konfiguration abrufen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • CLIENT_PROJECT_ID: Die ID Ihres Clientprojekts, das für die Abrechnung oder Kontingente verwendet wird.
  • PROJECT_ID: Die ID des Projekts, dessen Konfiguration Sie aktualisieren möchten.
  • ETAG: Der etag-Wert, der von einer aktuellen get-Anfrage zurückgegeben wurde.
  • INTEGRATION: Die integration, für die Sie die Konfiguration festlegen. Beispiel: DATAPROC

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

Wenn Sie die Aufnahme von Herkunftsdaten für einen Ordner oder eine Organisation deaktivieren möchten, ersetzen Sie projects/PROJECT_ID durch folders/FOLDER_ID oder organizations/ORGANIZATION_ID.

Aufnahme von Herkunftsdaten für einen Dienst aktivieren

Wenn Sie das Tracking nach dem Deaktivieren fortsetzen oder eine standardmäßig deaktivierte Integration aktivieren möchten, aktivieren Sie die Aufnahme von Herkunftsdaten für einen Dienst.

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

Wenn Sie die Aufnahme von Herkunftsdaten für einen bestimmten Dienst aktivieren möchten, verwenden Sie den Befehl gcloud datalineage config update mit einem Inline-JSON-String oder einem Pfad zu einer JSON-Datei, die lineageEnablement.enabled für den jeweiligen integration auf true setzt. Zu den aktuellen Integrationen gehören Managed Service for Apache Spark, BigQuery und Managed Airflow.

Im folgenden Beispiel wird gezeigt, wie Sie die Aufnahme von Herkunftsdaten eines Dienstes für ein Projekt mithilfe eines Inline-JSON-Strings aktivieren:

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, dessen Konfiguration Sie aktualisieren möchten.
  • INTEGRATION: Die Integration, für die Sie die Konfiguration festlegen (z. B. DATAPROC oder BIGQUERY).
  • ETAG: Der etag-Wert, der von einer kürzlich erfolgten get-Anfrage im Anfragetext zurückgegeben wurde. Er wird verwendet, um zu prüfen, ob sich die Konfiguration seit Ihrer letzten Leseanfrage geändert hat.

Führen Sie den folgenden Befehl aus, um die Konfiguration mithilfe einer JSON-Datei zu aktualisieren:

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

Ersetzen Sie Folgendes:

  • CONFIG_FILE: Der Pfad zur JSON-Datei, die die Konfiguration enthält.

Wenn Sie die Aufnahme von Herkunftsdaten eines Dienstes für einen Ordner oder eine Organisation aktivieren möchten, ersetzen Sie --project=PROJECT_ID durch einen der folgenden Werte:

  • --folder=FOLDER_ID, wenn Sie die Einstellungen für die Datenaufnahme für einen Ordner aktualisieren möchten.
  • --organization=ORGANIZATION_ID, wenn Sie die Einstellungen für die Datenaufnahme für eine Organisation aktualisieren möchten.

REST

Wenn Sie die Aufnahme von Herkunftsdaten für einen bestimmten Dienst aktivieren möchten, verwenden Sie die Methode projects.locations.config.patch mit einer Aufnahmeregel, die lineageEnablement.enabled für den spezifischen integration auf true setzt.

Wenn Sie verhindern möchten, dass Konfigurationen, die von anderen Nutzern in Szenarien mit Lesevorgängen, Änderungen und Schreibvorgängen vorgenommen wurden, versehentlich überschrieben werden, können Sie das Feld etag in den Anfragetext einfügen. Weitere Informationen finden Sie unter Aktuelle Konfiguration abrufen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • CLIENT_PROJECT_ID: Die ID Ihres Clientprojekts, das für die Abrechnung oder Kontingente verwendet wird.
  • PROJECT_ID: Die ID des Projekts, dessen Konfiguration Sie aktualisieren möchten.
  • ETAG: Der etag-Wert, der von einer aktuellen get-Anfrage zurückgegeben wurde.
  • INTEGRATION: Die integration, für die Sie die Konfiguration festlegen. Beispiel: DATAPROC

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

Wenn Sie die Aufnahme von Herkunftsdaten eines Dienstes für einen Ordner oder eine Organisation aktivieren möchten, ersetzen Sie projects/PROJECT_ID durch folders/FOLDER_ID oder organizations/ORGANIZATION_ID.

Aufnahme von Herkunftsdaten für mehrere Dienste konfigurieren

Wenn Sie die Aufnahme von Herkunftsdaten für mehrere Integrationen gleichzeitig konfigurieren möchten, verwenden Sie die Methode projects.locations.config.patch, folders.locations.config.patch oder organizations.locations.config.patch. Sie können die Konfiguration auf Projekt-, Ordner- oder Organisationsebene aktualisieren, indem Sie im Anfragetext mehrere Regeln definieren. Weitere Informationen finden Sie unter So funktioniert die Konfiguration der Datenaufnahme für Integrationen mit mehreren Diensten.

Organisationsebene

Konfigurieren Sie die Organisation so, dass die Aufnahme von Herkunftsdaten für Managed Service for Apache Spark aktiviert wird:

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

Ersetzen Sie Folgendes:

  • ORGANIZATION_ID: Die ID der Organisation, deren Konfiguration Sie aktualisieren möchten.
  • CLIENT_PROJECT_ID: Die ID Ihres Clientprojekts, das für die Abrechnung oder Kontingente verwendet wird.
  • ORGANIZATION_CONFIG_ETAG: Der etag-Wert, der von einer aktuellen get-Anfrage für die Organisationskonfiguration zurückgegeben wurde.

Ordnerebene

Konfigurieren Sie den Ordner so, dass die Aufnahme der Datenherkunft für BigQuery aktiviert wird:

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

Ersetzen Sie Folgendes:

  • FOLDER_ID: Die ID des Ordners, dessen Konfiguration Sie aktualisieren möchten.
  • CLIENT_PROJECT_ID: Die ID Ihres Clientprojekts, das für die Abrechnung oder Kontingente verwendet wird.
  • FOLDER_CONFIG_ETAG: Der etag-Wert, der von einer aktuellen get-Anfrage für die Konfiguration des Ordners zurückgegeben wurde.

Projektebene

Konfigurieren Sie das Projekt so, dass die Datenaufnahme für BigQuery deaktiviert und die Datenaufnahme für Managed Service for Apache Airflow gleichzeitig aktiviert wird:

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

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, dessen Konfiguration Sie aktualisieren möchten.
  • CLIENT_PROJECT_ID: Die ID Ihres Clientprojekts, das für die Abrechnung oder Kontingente verwendet wird.
  • PROJECT_CONFIG_ETAG: Der etag-Wert, der von einer aktuellen get-Anfrage für die Konfiguration des Projekts zurückgegeben wurde.

Nächste Schritte