In OpenLineage einbinden

In diesem Dokument wird erläutert, wie Sie OpenLineage in Knowledge Catalog (ehemals Dataplex Universal Catalog) einbinden, um Herkunftsdaten aus verschiedenen Systemen zu visualisieren.

Übersicht

OpenLineage ist eine offene Plattform zum Erfassen und Analysieren von Datenherkunftsinformationen. OpenLineage verwendet einen offenen Standard für Herkunftsdaten und erfasst Herkunftsereignisse aus Datenpipeline-Komponenten, die eine OpenLineage API verwenden, um über Ausführungen, Jobs und Datasets zu berichten.

Über die Data Lineage API können Sie OpenLineage-Ereignisse importieren, die in der Knowledge Catalog-Weboberfläche neben Herkunftsinformationen aus Google Cloud Diensten wie BigQuery, Managed Service for Apache Airflow, Cloud Data Fusion und Managed Service for Apache Spark angezeigt werden.

Wenn Sie OpenLineage-Ereignisse importieren möchten, die die OpenLineage-Spezifikation verwenden, verwenden Sie die ProcessOpenLineageRunEvent REST API-Methode und ordnen Sie OpenLineage-Facetten Data Lineage API-Attributen zu.

Beschränkungen

  • Die Data Lineage API unterstützt OpenLineage-Hauptversion 1.

  • Der Data Lineage API-Endpunkt ProcessOpenLineageRunEvent fungiert nur als Consumer von OpenLineage-Nachrichten, nicht als Producer. Mit der API können Sie Herkunftsinformationen, die von einem beliebigen OpenLineage-kompatiblen Tool oder System generiert wurden, an Knowledge Catalog senden. Einige Google Cloud Dienste wie Managed Service for Apache Spark und Managed Airflow enthalten integrierte OpenLineage-Producer, die Ereignisse an diesen Endpunkt senden können, wodurch die Erfassung der Herkunft aus diesen Diensten automatisiert wird.

  • Die Data Lineage API unterstützt Folgendes nicht:

    • Alle nachfolgenden OpenLineage-Versionen mit Änderungen am Nachrichtenformat
    • DatasetEvent
    • JobEvent
  • Die maximale Größe einer einzelnen Nachricht beträgt 5 MB.

  • Die Länge jedes vollständig qualifizierten Namens in Ein- und Ausgaben ist auf 4.000 Zeichen begrenzt.

  • Links werden nach Ereignissen gruppiert, mit maximal 100 Links pro Ereignis. Die maximale Gesamtzahl der Links auf Tabellenebene beträgt 1.000. Wenn eine Nachricht mehr als 1.500 Links auf Spaltenebene enthält, werden die Informationen auf Spaltenebene übersprungen.

  • Knowledge Catalog zeigt für jede Jobausführung ein Herkunftsdiagramm mit den Ein- und Ausgaben von Herkunftsereignissen an. Prozesse auf niedrigerer Ebene wie Spark-Phasen werden nicht unterstützt.

OpenLineage-Zuordnung

Informationen zur OpenLineage-Zuordnung finden Sie unter OpenLineage-Zuordnung.

OpenLineage-Ereignis importieren

Wenn Sie OpenLineage noch nicht eingerichtet haben, lesen Sie den Artikel Erste Schritte.

Wenn Sie ein OpenLineage-Ereignis in Knowledge Catalog importieren möchten, rufen Sie die API-Methode ProcessOpenLineageRunEvent auf.

C#

C#

Folgen Sie der C# Einrichtungsanleitung in der Knowledge Catalog-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Knowledge Catalog C# API.

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

using Google.Cloud.DataCatalog.Lineage.V1;
using Google.Protobuf.WellKnownTypes;

public sealed partial class GeneratedLineageClientSnippets
{
    /// <summary>Snippet for ProcessOpenLineageRunEvent</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 ProcessOpenLineageRunEventRequestObject()
    {
        // Create client
        LineageClient lineageClient = LineageClient.Create();
        // Initialize request argument(s)
        ProcessOpenLineageRunEventRequest request = new ProcessOpenLineageRunEventRequest
        {
            Parent = "",
            OpenLineage = new Struct(),
        };
        // Make the request
        ProcessOpenLineageRunEventResponse response = lineageClient.ProcessOpenLineageRunEvent(request);
    }
}

Go

Go

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

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


//go:build examples

package main

import (
	"context"

	lineage "cloud.google.com/go/datacatalog/lineage/apiv1"
	lineagepb "cloud.google.com/go/datacatalog/lineage/apiv1/lineagepb"
)

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 := lineage.NewClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

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

Java

Java

Folgen Sie der Java Einrichtungsanleitung in der Knowledge Catalog-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Knowledge Catalog Java API.

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

import com.google.cloud.datacatalog.lineage.v1.LineageClient;
import com.google.cloud.datacatalog.lineage.v1.ProcessOpenLineageRunEventRequest;
import com.google.cloud.datacatalog.lineage.v1.ProcessOpenLineageRunEventResponse;
import com.google.protobuf.Struct;

public class SyncProcessOpenLineageRunEvent {

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

  public static void syncProcessOpenLineageRunEvent() 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 (LineageClient lineageClient = LineageClient.create()) {
      ProcessOpenLineageRunEventRequest request =
          ProcessOpenLineageRunEventRequest.newBuilder()
              .setParent("parent-995424086")
              .setOpenLineage(Struct.newBuilder().build())
              .setRequestId("requestId693933066")
              .build();
      ProcessOpenLineageRunEventResponse response =
          lineageClient.processOpenLineageRunEvent(request);
    }
  }
}

Python

Python

Folgen Sie der Python Einrichtungsanleitung in der Knowledge Catalog-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Knowledge Catalog Python API.

Richten Sie zur Authentifizierung bei Knowledge Catalog die Standardanmeldedaten für Anwendungen (ADC) 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_v1


def sample_process_open_lineage_run_event():
    # Create a client
    client = datacatalog_lineage_v1.LineageClient()

    # Initialize request argument(s)
    request = datacatalog_lineage_v1.ProcessOpenLineageRunEventRequest(
        parent="parent_value",
    )

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

    # Handle the response
    print(response)

Ruby

Ruby

Folgen Sie der Ruby Einrichtungsanleitung in der Knowledge Catalog-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Knowledge Catalog Ruby API .

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

require "google/cloud/data_catalog/lineage/v1"

##
# Snippet for the process_open_lineage_run_event call in the Lineage service
#
# 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/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DataCatalog::Lineage::V1::Lineage::Client#process_open_lineage_run_event.
#
def process_open_lineage_run_event
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DataCatalog::Lineage::V1::Lineage::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DataCatalog::Lineage::V1::ProcessOpenLineageRunEventRequest.new

  # Call the process_open_lineage_run_event method.
  result = client.process_open_lineage_run_event request

  # The returned object is of type Google::Cloud::DataCatalog::Lineage::V1::ProcessOpenLineageRunEventResponse.
  p result
end

REST

Verwenden Sie die processOpenLineageRunEvent Methode, um ein OpenLineage-Ereignis zu importieren.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud Projekt-ID.
  • LOCATION_ID: den Google Cloud Standort, z. B. us-central1.

HTTP-Methode und URL:

POST https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID:processOpenLineageRunEvent

JSON-Text anfordern:

{
  "eventTime": "2023-04-04T13:21:16.098Z",
  "eventType": "COMPLETE",
  "inputs": [
    {
      "name": "somename",
      "namespace": "customnamespace"
    }
  ],
  "job": {
    "name": "somename",
    "namespace": "customnamespace"
  },
  "outputs": [
    {
      "name": "somename",
      "namespace": "customnamespace"
    }
  ],
  "producer": "someproducer",
  "run": {
    "runId": "somerunid"
  },
  "schemaURL": "https://openlineage.io/spec/1-0-5/OpenLineage.json#/$defs/RunEvent"
}

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

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

{
  "process": "projects/my-project/locations/us-central1/processes/my-process",
  "run": "projects/my-project/locations/us-central1/processes/my-process/runs/my-run",
  "lineageEvents": [
    "projects/my-project/locations/us-central1/processes/my-process/runs/my-run/lineageEvents/my-lineage-event"
  ]
}

Tools zum Senden von OpenLineage-Nachrichten

Um das Senden von Ereignissen an die Data Lineage API zu vereinfachen, können Sie verschiedene Tools und Bibliotheken verwenden:

  • Google Cloud Java Producer Library:Google bietet eine Open-Source-Java-Bibliothek, mit der Sie OpenLineage-Ereignisse erstellen und an die Data Lineage API senden können. Weitere Informationen finden Sie im Blogpost Producer java library for Data Lineage is now open source. Die Bibliothek ist auf GitHub und Mavenverfügbar.
  • OpenLineage GCP Transport: Für Java-basierte OpenLineage-Producer ist ein spezieller GcpLineage Transport verfügbar. Er vereinfacht die Einbindung in die Data Lineage API, da weniger Code zum Senden von Ereignissen an die Data Lineage API erforderlich ist. Der GcpLineageTransport kann als Ereignissenke für jeden vorhandenen OpenLineage-Producer wie Airflow, Spark und Flink konfiguriert werden. Weitere Informationen und Beispiele finden Sie unter GcpLineage.

Informationen aus OpenLineage analysieren

Informationen zum Analysieren der importierten OpenLineage-Ereignisse finden Sie unter Herkunftsdiagramme in der Knowledge Catalog-UI ansehen.

Gespeicherte Daten

Die Data Lineage API speichert nicht alle Facettendaten aus den OpenLineage-Nachrichten. Die Data Lineage API speichert die folgenden Facettenfelder:

  • spark_version
    • openlineage-spark-version
    • spark-version
  • alle spark.logicalPlan.*
  • environment-properties (custom Google Cloud lineage-Facette)
    • origin.sourcetype und origin.name
    • spark.app.id
    • spark.app.name
    • spark.batch.id
    • spark.batch.uuid
    • spark.cluster.name
    • spark.cluster.region
    • spark.job.id
    • spark.job.uuid
    • spark.project.id
    • spark.query.node.name
    • spark.session.id
    • spark.session.uuid

Die Data Lineage API speichert die folgenden Informationen:

  • eventTime
  • run.runId
  • job.namespace
  • job.name

Nächste Schritte