Externe Lineage

Externe Lineage (Datenherkunft) erweitert die native Lineage von Snowflake, indem es externe Datenquellen und -ziele einbezieht und Ihnen einen Einblick in die Datenströme in Ihrem gesamten Datenökosystem bietet. Es erfasst die Lineage von externen ETL-Tools und Quelldatenbanken, um eine einheitliche Ansicht zu erstellen, wie sich die Daten durch Ihre Datenpipeline bewegen.

OpenLineage ist ein offener Standard für die Erfassung und Freigabe von Datenherkunftsinformationen über verschiedene Datentools und Datenplattformen hinweg. Snowflake nutzt dieses Framework, indem es OpenLineage-kompatible Ereignisse durch einen REST-Endpunkt akzeptiert. Externe Tools wie dbt und Apache Airflow können den Endpunkt verwenden, um Herkunftsmetadaten an Snowflake zu senden, das diese Informationen dann in das in angezeigte native Lineage-Diagramm Snowsight aufnimmt.

Externe Lineage REST-Endpunkt
/api/v2/lineage/external-lineage
Copy
Snowflake-Basis-URL für REST-Endpunkte
https://<account_identifier>.snowflakecomputing.com
Copy

Dabei ist account-identifier der Kontobezeichner Ihres Snowflake-Kontos. Sie können als Kontobezeichner entweder das Format des Kontonamens oder das Format des Konto-Locators verwenden.

Wenn Ihr Kontobezeichner beispielsweise myorg-dev_account lautet, dann ist die Basis-URL des externen Herkunftsendpunkts: https://myorg-dev_account.snowflakecomputing.com

Workflow mit externer Lineage

Die Implementierung einer externen Lineage für ein Datentool besteht aus den folgenden Aufgaben:

  1. Erteilen der erforderlichen Berechtigungen für den Benutzer, der sich bei dem externen Lineage-Endpunkt authentifiziert.

  2. Konfigurieren Ihres Datentools, um OpenLineage-Ereignisse an den Snowflake-REST-Endpunkt zu senden.

  3. Wählen Sie eine Authentifizierungsmethode aus, die für Snowflake REST APIs funktioniert, und konfigurieren Sie dann Ihr Datentool so, dass es diese zur Authentifizierung seiner Anfragen an den externen Herkunftsendpunkt verwendet.

  4. Verwenden Sie Ihr Datentool wie gewohnt. OpenLineage-Ereignisse werden automatisch an Snowflake gesendet und im nativen Lineage-Diagramm in der Snowsight angezeigt.

Wenn Sie den Endpunkt der externen Herkunft testen möchten, bevor Sie ein Datentool für die Ausgabe von OpenLineage-Ereignissen konfigurieren, lesen Sie Senden von manuellen Anfragen, um die Herkunft festzustellen.

Anzeigen der Datenherkunft

Um die Datenherkunft in der Snowsight anzuzeigen, führen Sie die folgenden Schritte aus:

  1. Melden Sie sich bei Snowsight mit den erforderlichen Berechtigungen an.

  2. Wählen Sie im Navigationsmenü Catalog » Database Explorer und dann ein unterstütztes Objekt aus, wie z. B. eine Tabelle oder Ansicht.

  3. Wählen Sie die Registerkarte Lineage aus.

Wenn ein Datentool Herkunftsinformationen an Snowflake sendet, werden externe Objekte im Lineage-Diagramm der Snowsight angezeigt und als externe Knoten gekennzeichnet. Beispiel:

Snowsight Lineage-Diagramm mit externen Objekten

Sie können ein externes Objekt oder die Linie auswählen, die die Objekte verbindet, um zusätzliche Informationen zu erhalten, genau wie bei der nativen Lineage.

Snowflake-Berechtigungen erteilen

Nachdem eine REST-Anforderung authentifiziert wurde, prüfen Sie, ob der mit der Anfrage verbundene Benutzer berechtigt ist, die externe Lineage zu verwenden. Der mit der Anfrage verbundene Benutzer muss eine Rolle haben, der die Berechtigung INGEST LINEAGE für das Konto zugewiesen ist.

Angenommen, Sie möchten Anfragen vom Dienstbenutzer dbt_integration_user senden, die in der Snowsight Lineage angezeigt werden sollen. Führen Sie als Administrator die folgenden Befehle aus, um eine dedizierte Rolle zu erstellen, dieser Rolle die erforderlichen Berechtigungen zu erteilen und dann dem Benutzer die Rolle zuzuweisen:

CREATE ROLE dbt_lineage_role;
GRANT INGEST LINEAGE ON ACCOUNT TO ROLE dbt_lineage_role;
GRANT ROLE dbt_lineage_role TO USER dbt_integration_user;
Copy

Datentool konfigurieren

Bemerkung

Jedes Datentool mit einer OpenLineage-Integration kann so konfiguriert werden, dass Herkunftsdaten an Snowflake gesendet werden. Eine vollständige Liste der Tools, die über eine Integration verfügen, finden Sie unter OpenLineage-Integrationen.

Die folgenden Abschnitte enthalten grundlegende Anweisungen zur Verwendung der externen Lineage- mit dbt und Apache AirFlow.

Konfigurieren von dbt, um Lineage-Daten an Snowflake zu senden

Bemerkung

Das Konfigurieren von dbt zur Ausgabe von OpenLineage-Ereignissen gilt nicht nur für Snowflake. Für Snowflake spezifisch sind jedoch der Endpunkt und die Basis-URL der externen Lineage.

Die folgenden Schritte enthalten die Mindestkonfiguration, die Sie zum Einrichten Ihrer dbt-Umgebung benötigen. Lesen Sie die OpenLineage dbt-Dokumentation und die OpenLineage-Spezifikation, um Ihre OpenLineage-dbt-Integration zu konfigurieren.

  1. Installieren Sie die OpenLineage-dbt-Integration:

    pip3 install openlineage-dbt
    
    Copy
  2. Stellen Sie Ihre Transportvariablen ein, um die Basis-URL, den -Endpunkt und das -Sicherheitstoken für externe Lineage anzugeben.

    Wenn der Kontobezeichner Ihres Kontos beispielsweise MYORG-DEV_ACCOUNT lautet, definieren Sie den folgenden Code in Ihrer YAML-Konfigurationsdatei:

    transport:
       type: http
       url: https://MYORG-DEV_ACCOUNT.snowflakecomputing.com
       endpoint: /api/v2/lineage/external-lineage
       auth:
          type: api_key
          apiKey: eyJ0eXAiOiJKV1QiLsecuritytoken...
       compression: gzip
    
    Copy
  3. Ersetzen Sie die dbt-Befehle durch dbt-ol. Ändern Sie zum Beispiel den dbt run-Befehl in dbt-ol run.

    Diese dbt-ol-Befehle sind für die OpenLineage-dbt-Integration erforderlich und nicht speziell für Snowflake.

Weitere Informationen zu OpenLineage-dbt-Integrationen, einschließlich anderer Methoden zum Festlegen von Variablen, finden Sie in der OpenLineage dbt-Dokumentation.

Konfigurieren von Airflow, um Lineage-Daten an Snowflake zu senden

Bemerkung

Das Konfigurieren von Apache Airflow zur Ausgabe von OpenLineage-Ereignissen gilt nicht nur für Snowflake. Für Snowflake spezifisch sind jedoch der Endpunkt und die Basis-URL der externen Lineage.

Die folgenden Schritte enthalten die Mindestkonfiguration, die Sie benötigen, um Ihre Airflow-Umgebung für Airflow Version 2.7 oder höher einzurichten, welches die bevorzugte Version von OpenLineage ist. Lesen Sie die OpenLineage Airflow-Dokumentation und die OpenLineage-Spezifikation, um Ihre OpenLineage Airflow-Integration zu konfigurieren.

  1. Installieren Sie die OpenLineage Airflow-Integration für Version 2.7+:

    pip install apache-airflow-providers-openlineage
    
    Copy

    Wenn Sie eine ältere Version von Airflow verwenden, installieren Sie stattdessen openlineage-airflow.

  2. Stellen Sie Ihre Transportvariablen ein, um die Basis-URL, den -Endpunkt und das -Sicherheitstoken für externe Lineage anzugeben.

    Wenn der Kontobezeichner Ihres Kontos beispielsweise MYORG-DEV_ACCOUNT lautet, definieren Sie den folgenden Code in Ihrer YAML-Konfigurationsdatei:

    transport:
       type: http
       url: https://MYORG-DEV_ACCOUNT.snowflakecomputing.com
       endpoint: /api/v2/lineage/external-lineage
       auth:
          type: api_key
          apiKey: eyJ0eXAiOiJKV1QiLsecuritytoken...
       compression: gzip
    
    Copy

Weitere Informationen zu OpenLineage Airflow-Integrationen, einschließlich anderer Methoden zum Festlegen von Variablen, finden Sie in der OpenLineage Airflow-Dokumentation.

Auswählen einer Authentifizierungsmethode

Snowflake bietet mehrere Möglichkeiten, Anforderungen an einen Snowflake-REST-Endpunkt zu authentifizieren, wie er von der externen Lineage verwendet wird. Eine vollständige Liste der Authentifizierungsmethoden finden Sie unter Authentifizierung von Snowflake REST APIs mit Snowflake.

Nachdem Sie Ihre bevorzugte Authentifizierungsmethode ausgewählt haben, müssen Sie ein Sicherheitstoken für einen bestimmten Benutzer erzeugen. Das Token wird verwendet, um einen Benutzer mit der REST-Anforderung zu verknüpfen, sodass Snowflake den Benutzer authentifizieren und überprüfen kann, ob der Benutzer autorisiert ist, externe Lineage zu verwenden.

Nachdem Sie einem Benutzer in Snowflake erfolgreich ein Sicherheitstoken zugeordnet haben, müssen Sie Ihr Datentool so konfigurieren, dass es seine Anforderungen mit diesem Token authentifiziert. Wenn Sie z. B. eine YAML-Konfigurationsdatei verwenden, um OpenLineage-Transportvariablen festzulegen, verwenden Sie den folgenden Code, um das Sicherheitstoken anzugeben, das im Header der Anforderung gesendet wird:

transport:
   auth:
      type: api_key
      apiKey: eyJ0eXAiOiJKV1QiLsecuritytoken...
Copy

Weitere Methoden zum Angeben eines Sicherheitstokens finden Sie in der OpenLineage-Dokumentation zu Ihrem Datentool.

Senden von manuellen Anfragen, um die Herkunft festzustellen

Die externe Herkunft (Lineage) funktioniert durch Akzeptieren von JSON-Nutzlasten, die der OpenLineage-Spezifikation für COMPLETE-Ereignisse entsprechen. Bei der Integration in ein Datentool gibt das Tool diese COMPLETE-Ereignisse aus. Sie können aber auch ein COMPLETE-Ereignis konstruieren und es dann mit einem beliebigen Tool oder einer Sprache senden, die POST-Anforderungen an einen Endpunkt senden kann.

Eine gültige Anforderung besteht aus der folgenden Methode: Basis-URL und Endpunkt:

POST https://<account_identifier>.snowflakecomputing.com/api/v2/lineage/external-lineage
Copy

Dabei ist account_identifier der Kontobezeichner Ihres Snowflake-Kontos.

Das folgende Beispiel zeigt, wie Sie curl verwenden, um Herkunftsinformationen an die externe Lineage zu senden:

curl -i -X POST \
 -H "Content-Type: application/json" \
 -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLsecuritytoken..." \
 -H "Accept: application/json" \
 -H "User-Agent: myApplicationName/1.0" \
 -H "X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT" \
 -d "@request_body.json" \
 "https://MYORG-DEV_ACCOUNT.snowflakecomputing.com/api/v2/lineage/external-lineage"
Copy

Dabei entspricht request_body.json der OpenLineage-Spezifikation für COMPLETE-Ereignisse. Weitere Informationen zur JSON-Nutzlast finden Sie unter Nutzdatenanforderungen.

Authentifizierung und Autorisierung einer manuellen Anforderung

Die Authentifizierung und Autorisierung einer manuellen Anforderung, die an den externen Endpunkt gesendet wird, funktioniert wie für eine Anforderung, die von einem Datentool gesendet wird.

  • Der Header der Anforderung muss ein Sicherheitstoken in einer der Formen der Authentifizierung, die von Snowflake REST-Endpunkten unterstützt werden, enthalten.

  • Der Benutzer, der mit dem Sicherheitstoken verbunden ist, muss die richtigen Berechtigungen haben.

Nutzdatenanforderungen

Wenn Sie die JSON-Nutzlast in einer manuellen Anforderung an den externen Lineage-Endpunkt senden, muss die Nutzlast die folgenden Anforderungen erfüllen:

  • Muss der OpenLineage-Spezifikation entsprechen.

  • Muss ein COMPLETE-Ereignis sein. Das heißt, die eventType-Eigenschaft muss COMPLETE sein. Andere Typen von Ereignissen werden ignoriert.

  • Die inputs-Eigenschaft und die outputs-Eigenschaft muss eine Mischung aus Snowflake- und externen Objekten sein. Sie können die externe Lineage nicht verwenden, um die Lineage zwischen zwei externen Objekten oder zwischen zwei Snowflake-Objekten festzulegen. Wenn beide Eigenschaften den gleichen Objekttyp angeben (Snowflake oder extern), gibt die Anfrage einen HTTP-Statuscode 404 zurück.

  • Muss die folgenden Eigenschaften enthalten:

    • inputs

    • outputs

    • eventType

    • eventTime

    • job

    Sie können optional die run-Eigenschaft angeben, die bei der Identifizierung des Jobs nützlich ist. Die Nutzlast kann zusätzliche Eigenschaften enthalten, aber Snowflake ignoriert diese.

Beispiel für minimale Nutzlast

Das folgende Beispiel zeigt eine minimale Nutzlast, die Sie an den Endpunkt der externen Lineage senden können:

{
   "eventType": "COMPLETE",
   "eventTime": "2025-03-12T06:51:12.000Z",
   "job": {"namespace": "exampleNamespace", "name": "exampleJob"},
   "run": {"runId": "123e4567-e89b-12d3-a456-426614174000"},
   "producer": "https://github.com/OpenLineage/OpenLineage/blob/v1-0-0/client",
   "schemaURL": "https://openlineage.io/spec/0-0-1/OpenLineage.json",
   "inputs": [{"namespace": "snowflake://AXORG-AX_TEST_PP8", "name": "OL_TEST.OL_TEST_SCH.TEST_DEMO"}],
   "outputs": [{"namespace": "postgres://localhost:5432", "name": "PDB.SCH.OUTPUT"}]
}
Copy

Angeben von Objekttypen

Innerhalb des outputs-Arrays der Nutzlast können Sie das Feld facets verwenden, um den Typ des Objekts anzugeben, der eine beliebige benutzerdefinierte Zeichenfolge sein kann. Der folgende Codeausschnitt der Nutzlast gibt zum Beispiel an, dass das Objekt vom Typ VIEW ist:

"outputs": [
    {
        "namespace": "postgres://db.company.com:5432",
        "name": "db.schema.view",
        "facets": {"datasetType": {"datasetType": "VIEW"}},
    },
],
Copy

Wenn Sie kein facets-Feld angeben, ist der Objekttyp standardmäßig External Node.

Festlegen mehrerer Eingaben

Wenn eine Nutzlast mehr als eine Eingabe enthält, zeigt die resultierende Herkunft die Ausgabe als nachgelagertes Objekt beider Eingaben an. Wenn eine Nutzlast beispielsweise die Eingabe A und B zusammen mit der Ausgabe C hat, zeigt die Herkunft sowohl A-C als auch B-C.

Senden von Anforderungen zum Entfernen der Lineage

Sie können eine DELETE-Anforderung an den externen Lineage-Endpunkt senden, um die Herkunft zu entfernen, die zwischen einem Snowflake-Objekt und einem externen Objekt hergestellt wurde.

  • Um die Lineage zwischen dem Quellobjekt und dem Zielobjekt zu unterbrechen, verwenden Sie URL-Abfrageparameter, um Details zu den beiden Objekten anzugeben.

  • Um die Lineage zwischen einem Objekt und allen seinen nachgelagerten Objekten zu unterbrechen, geben Sie das Quellobjekt ohne Angabe eines Zielobjekts an.

  • Um ein Zielobjekt aus dem Lineage-Diagramm zu entfernen, unabhängig davon, wie viele Objekte sich vorgelagert befinden, geben Sie das Zielobjekt ohne Angabe eines Quellobjekts an.

Eine gültige Anfrage zum Entfernen der Lineage besteht aus der folgenden Methode: Basis-URL und Endpunkt:

DELETE https://<account_identifier>.snowflakecomputing.com/api/v2/lineage/external-lineage
Copy

Abfrageparameter

Beschreibung

sourceNamespace={namespace}

Namespace des Quell-Datensets.

sourceName={FQN}

Vollqualifizierter Name des Quell-Datensets.

sourceDatasetType={dataset type}

Typ des Quell-Datensets (zum Beispiel TABLE, VIEW, DATASET). Standardmäßig sollte der Wert „External node“ sein. Wenn Sie in einen Wert im Feld facets der Nutzlast angegeben haben, als Sie eine Anforderung zur Ermittlung der Herkunft gesendet haben, geben Sie hier den Wert an, den Sie in der Nutzlast gesendet haben, nicht „External node“.

targetNamespace={namespace}

Namespace des Ziel-Datensets.

targetName={FQN}

Vollqualifizierter Name des Ziel-Datensets.

targetDatasetType={dataset type}

Typ des Ziel-Datensets (z. B. TABLE, VIEW, DATASET). Standardmäßig sollte der Wert „External node“ sein. Wenn Sie in einen Wert im Feld facets der Nutzlast angegeben haben, als Sie eine Anforderung zur Ermittlung der Herkunft gesendet haben, geben Sie hier den Wert an, den Sie in der Nutzlast gesendet haben, nicht „External node“.

Zugriffssteuerung für das Entfernen der Lineage

Der Benutzer, der eine Anfrage zum Entfernen der Lineage zwischen Objekten sendet, muss über die Berechtigung DELETE LINEAGE für das Konto verfügen.

Einschränkungen und Hinweise

  • Ein Snowflake-Objekt muss entweder INPUT oder OUTPUT eines COMPLETE-Ereignisses sein. Das heißt, die externe Lineage erfasst keine Herkunftsereignisse, wenn weder die Eingabedaten noch die Ausgabedaten ein Snowflake-Objekt sind.

  • Snowflake unterstützt nicht OpenLineage Version 2.

  • Die Aufbewahrungsfrist für externe Lineage-Ereignisse beträgt ein Jahr.

  • Snowflake erkennt nur COMPLETE Lineage-Ereignisse. Alle anderen Ereignisse, die von einem Datentool ausgegeben werden, werden ignoriert.

  • Die Lineage aus externen Quellen erscheint nicht in der Ausgabe der GET_LINEAGE-Funktion.

  • Die externe Lineage unterstützt nicht die Lineage von Spalten.

  • Der vollqualifizierte Name eines Datensets – d. h. die Eingabe oder Ausgabe – darf 1.000 Zeichen nicht überschreiten.

  • Sie können nicht mehr als 10.000 Ereignisse in demselben Konto speichern. Wenn Sie dieses Limit erreichen, müssen Sie erst Ereignisse löschen, bevor Sie neue hinzufügen.