שילוב עם OpenLineage

במאמר הזה מוסבר איך לשלב את OpenLineage עם Knowledge Catalog (לשעבר Dataplex Universal Catalog) כדי לייבא ולהציג באופן חזותי את שושלת היוחסין של הנתונים ממערכות חיצוניות. ‫Knowledge Catalog פועל כצרכן של OpenLineage באמצעות ה-API בארכיטקטורת REST של ProcessOpenLineageRunEvent, וכך מאפשר לאחד את שושלת הנתונים של פייפליין בהתאמה אישית עם שושלת הנתונים המובנית משירותי Google Cloud .

סקירה כללית

‫OpenLineage היא פלטפורמה פתוחה לאיסוף ולניתוח של מידע על שושלת נתונים. באמצעות תקן פתוח לנתוני שושלת, OpenLineage מתעד אירועי שושלת מרכיבי פייפליין שמשתמשים ב-OpenLineage API כדי לדווח על הרצות, משימות ומערכי נתונים.

באמצעות Data Lineage API, אתם יכולים לייבא אירועים מ-OpenLineage כדי להציג אותם בממשק האינטרנט של Knowledge Catalog לצד מידע על שושלת הנתונים משירותיGoogle Cloud , כמו BigQuery,‏ Managed Service for Apache Airflow,‏ Cloud Data Fusion ו-Managed Service for Apache Spark.

כדי לייבא אירועי OpenLineage שמשתמשים במפרט OpenLineage, משתמשים ב-method של ה-API בארכיטקטורת REST‏ ProcessOpenLineageRunEvent וממפים את ההיבטים של OpenLineage למאפיינים של Data Lineage API.

מגבלות השילוב של OpenLineage

  • גרסאות נתמכות: ה-API של Data Lineage תומך בגרסאות העיקריות 1 ו-2 של OpenLineage.

  • פעולות API: נקודת הקצה ל-API של Data Lineage‏ ProcessOpenLineageRunEvent פועלת רק כצרכן של הודעות OpenLineage, ולא כיצרן. באמצעות ה-API אפשר לשלוח ל-Knowledge Catalog מידע על שושלת נתונים שנוצר על ידי כל כלי או מערכת שתואמים ל-OpenLineage. בחלק משירותי Google Cloud , כמו Managed Service for Apache Spark ו-Managed Airflow, יש יצרני OpenLineage מובְנים שיכולים לשלוח אירועים לנקודת הקצה הזו, וכך להפוך את תיעוד שושלת היוחסין מהשירותים האלה לאוטומטי.

  • תכונות שלא נתמכות: ב-Data Lineage API אין תמיכה בתכונות הבאות:

    • כל גרסה עתידית של OpenLineage עם שינויים בפורמט ההודעות
    • DatasetEvent
    • JobEvent
  • גודל ההודעה: הגודל המקסימלי של הודעה בודדת הוא 5MB.

  • אורך השם: האורך של כל שם מלא בקלט ובפלט מוגבל ל-4,000 תווים.

  • שושלת ברמת העמודה: נקודת הקצה ProcessOpenLineageRunEvent יוצרת קצוות של שושלת ברמת הטבלה רק לאירועים מותאמים אישית של OpenLineage. תרשימי שושלת יוחסין ברמת העמודה נוצרים רק לטרנספורמציות של BigQuery SQL ולמשימות של Managed Service for Apache Spark. היבטים ברמת העמודה בהתאמה אישית לא מוצגים במסוף.

  • מגבלות על קישורים: הקישורים מקובצים לפי אירועים, עם מקסימום של 100 קישורים לכל אירוע. המספר המקסימלי של קישורים ברמת הטבלה הוא 1,000. במנועים אוטומטיים נתמכים שאוספים שושלת יוחסין ברמת העמודה, אם הודעה מכילה יותר מ-1,500 קישורים ברמת העמודה, המערכת מדלגת על המידע ברמת העמודה.

  • היקף התרשים: ב-Knowledge Catalog מוצג תרשים של שושלת היוחסין לכל הרצת משימה, עם הקלט והפלט של אירועי שושלת היוחסין. היא לא תומכת בתהליכים ברמה נמוכה יותר, כמו שלבי Spark.

מיפוי מאפייני פאסט של OpenLineage

למידע על מיפוי OpenLineage, קראו את המאמר מיפוי OpenLineage.

ייבוא אירוע OpenLineage

אם עדיין לא הגדרתם את OpenLineage, קראו את המאמר תחילת השימוש.

כדי לייבא אירוע של OpenLineage ל-Knowledge Catalog, צריך להפעיל את ה-method ‏ProcessOpenLineageRunEvent של ה-API.

C#‎

C#

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במדריך למתחילים בנושא שושלת נתונים באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של ‎Data Lineage C# API.

כדי לבצע אימות ב-Data Lineage, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

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 במדריך למתחילים בנושא שושלת נתונים באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של Data Lineage Go API.

כדי לבצע אימות ב-Data Lineage, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.


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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים בנושא שושלת נתונים באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של ‎Data Lineage Java API.

כדי לבצע אימות ב-Data Lineage, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים בנושא שושלת נתונים באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של ‎Data Lineage Python API.

כדי לבצע אימות ב-Data Lineage, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

# 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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במדריך למתחילים בנושא שושלת נתונים באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של Data Lineage Ruby API.

כדי לבצע אימות ב-Data Lineage, צריך להגדיר את Application Default Credentials. למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.

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

כדי לייבא אירוע OpenLineage, משתמשים בשיטה processOpenLineageRunEvent.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫LOCATION_ID: המיקום ב- Google Cloud , למשל us-central1.

ה-method של ה-HTTP וכתובת ה-URL:

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

תוכן בקשת JSON:

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

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "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"
  ]
}

כלים לשליחת הודעות OpenLineage

כדי לפשט את שליחת האירועים ל-Data Lineage API, אתם יכולים להשתמש בכלים ובספריות שונים:

  • ספריות הלקוח של Google Cloud ל-Data Lineage: ‏Google מספקת ספריות לקוח כדי ליצור אינטראקציה עם Data Lineage API באופן פרוגרמטי. הוראות להתקנה מפורטות במאמר ספריות לקוח.
  • ספריית Google Cloud Java Producer: Google מספקת ספריית Java בקוד פתוח שעוזרת ליצור ולשלוח אירועי OpenLineage ל-Data Lineage API. למידע נוסף, קראו את הפוסט בבלוג ספריית Java של Producer ל-Data Lineage היא עכשיו בקוד פתוח. הספרייה זמינה ב-GitHub וב-Maven.
  • ‫OpenLineage GCP Transport: ליוצרי OpenLineage שמבוססים על Java, יש GcpLineage Transport ייעודי. הוא מפשט את השילוב עם Data Lineage API, על ידי צמצום הקוד שנדרש לשליחת אירועים ל-Data Lineage API. אפשר להגדיר את GcpLineageTransport ככיור האירועים לכל יצרן OpenLineage קיים, כמו Airflow, ‏ Spark ו-Flink. מידע נוסף ודוגמאות זמינים במאמר GcpLineage.

ניתוח מידע מ-OpenLineage

כדי לנתח את אירועי OpenLineage שיובאו, קראו את המאמר הצגת תרשימי שושלת בממשק המשתמש של Knowledge Catalog.

נתוני פאסטים של OpenLineage שנשמרו

‫Data Lineage API לא מאחסן את כל נתוני ההיבטים מההודעות של OpenLineage. ‫Data Lineage API מאחסן את שדות ההיבטים הבאים:

  • spark_version
    • openlineage-spark-version
    • spark-version
  • כל spark.logicalPlan.*
  • ‫environment-properties (היבט מותאם אישית Google Cloud של שושלת היוחסין)
    • origin.sourcetype וגם 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

ב-Data Lineage API נשמר המידע הבא:

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

המאמרים הבאים