このドキュメントでは、searchLineageStreaming API を使用して、マルチレベルのクロスリージョン データリネージを検索する方法について説明します。
The
searchLineageStreaming
API は、定義されたルート エンティティのセットから開始して、指定された方向(アップストリームまたは
ダウンストリーム)に幅優先探索を実行し、統合された
リネージグラフをリアルタイム ストリーミング レスポンスとして返します。
大規模なマルチプロジェクト グラフでタイムアウトする可能性がある標準のリネージ検索 API とは異なり、searchLineageStreaming
はリアルタイムでチャンク化されたレスポンスを提供します。リクエストのタイムアウトなしで、広範で深い、またはクロスリージョンのデータ
アーキテクチャをトラバースする必要があるツールを構築する場合は、この API を使用します。
詳細については、マルチリージョン リネージ 検索についてをご覧ください。
主な機能
searchLineageStreaming API には次の機能があります。
幅優先探索: リネージグラフをレイヤごとにトラバースし、 接続されている各アセットの深さを正確に計算します。
ストリーミング レスポンス: バックエンド システムで検出されたサブグラフとリネージリンクを返します。これは、広範または深いリネージグラフに非常に効率的で、リクエストのタイムアウトを防ぎます。
マルチロケーションとマルチプロジェクトのトラバース: リクエスト パスで 課金プロジェクトを 1 つだけ指定しますが、必要な権限があれば、API は複数の プロジェクトと地理的な ロケーションにわたるリネージリンクを自動的に検出してトラバースします。 Google Cloud
きめ細かい列レベルのリネージ: アセット間の列レベルの 依存関係の検索をサポートします。
ワイルドカード検索: 完全修飾された名前(FQN)に
*を追加することで、特定のエンティティのすべての列レベルのリネージを取得できます。パイプラインの分析情報: 必要に応じて、リネージリンクを作成した変換 パイプライン(プロセス)に関するメタデータを取得します。
始める前に
API にリクエストを行う前に、次のセキュリティと環境の前提条件を満たしていることを確認してください。
必要なロール
データリネージリンクを検索するために必要な権限を取得するには、リネージリンクとプロセスが保存されているプロジェクトに対するデータリネージ閲覧者 (roles/datalineage.viewer)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
この事前定義ロールには データリネージリンクを検索するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
データリネージリンクを検索するには、次の権限が必要です。
-
エンティティ レベルのリネージを検索する:
datalineage.events.getリンクが保存されているプロジェクトに対する -
列レベルのリネージを検索する:
datalineage.events.getFieldsリンクが保存されているプロジェクトに対する -
完全なパイプライン プロセスの詳細を取得する:
datalineage.processes.getプロセスが保存されているプロジェクトに対する
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
リソースのスコープ設定
API リクエストを構成する場合は、管理課金に使用されるリソースと、API によってスキャンされる実際のロケーションを区別する必要があります。
課金親パス: URL リクエストの
parentパスは、 形式projects/project/locations/locationを使用する必要があります。 この特定のプロジェクトとロケーションのペアは、課金割り当てと API レート制限を評価するためにのみ使用されます。ターゲット ロケーション: リクエスト本文内の
locations配列で、バックエンドでスキャンするリージョンを明示的に定義します。
認証の設定
アクセス トークンを使用して環境変数を初期化し、
コマンドを認証します。 Google Cloud curl
export ACCESS_TOKEN=$(gcloud auth print-access-token)
使用例
次の例では、エンドポイント datalineage.googleapis.com を使用します。
マルチレベル、マルチプロジェクトのリネージを検索する
グラフの複数の深さをトラバースし、個別の Google Cloud プロジェクトをスキャンする詳細なリネージ検索を実行するには、次の 変数を定義します。
limits.maxDepthをターゲットのトラバース深度に設定します(1~100の値を受け付けます)。バックエンドで相互参照するターゲット リージョンを
locations配列に入力します(例:["us", "us-east1"])。
C#
C#
このサンプルを試す前に、クライアント ライブラリを使用した Data Lineage のクイックスタートにある C#の設定手順を行ってください。 詳細については、 Data Lineage C# API リファレンス ドキュメントをご覧ください。
Data Lineage で認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
Java
Java
このサンプルを試す前に、クライアント ライブラリを使用した Data Lineage のクイックスタートにあるJava設定手順を行ってください。詳細については、 Data Lineage Java API リファレンス ドキュメントをご覧ください。
Data Lineage で認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
Node.js
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した Data Lineage のクイックスタートにあるNode.js の設定手順を行ってください。 詳細については、 Data Lineage Node.js API リファレンス ドキュメントをご覧ください。
Data Lineage で認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
Python
Python
このサンプルを試す前に、クライアント ライブラリを使用した Data Lineage のクイックスタートにある Python設定手順を行ってください。 詳細については、 Data Lineage Python API リファレンス ドキュメントをご覧ください。
Data Lineage で認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
Ruby
Ruby
このサンプルを試す前に、クライアント ライブラリを使用した Data Lineage のクイックスタートにあるRuby設定手順を行ってください。 詳細については、 Data Lineage Ruby API のリファレンス ドキュメントをご覧ください。
Data Lineage で認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
REST
データリネージを検索するには、
searchLineageStreaming メソッドを使用します。
リクエストのデータを使用する前に、 次のように置き換えます。
PROJECT_ID: 管理課金と割り当て評価に使用する Google Cloud プロジェクト ID 。LOCATION_ID:ロケーション( Google Cloud など)。us-central1SOURCE_PROJECT_ID: ソーステーブルが配置されている Google Cloud プロジェクト ID。DATASET_ID: BigQuery データセット ID。TABLE_ID: BigQuery テーブル ID。
HTTP メソッドと URL:
POST https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID:searchLineageStreaming
リクエストの本文(JSON):
{
"parent": "projects/PROJECT_ID/locations/LOCATION_ID",
"locations": [
"LOCATION_ID",
"us-east1",
"us-central1"
],
"rootCriteria": {
"entities": {
"entities": [
{
"fullyQualifiedName": "bigquery:SOURCE_PROJECT_ID.DATASET_ID.TABLE_ID"
}
]
}
},
"direction": "DOWNSTREAM",
"limits": {
"maxDepth": 10,
"maxResults": 5000
}
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{
"links": [
{
"source": {
"fullyQualifiedName": "bigquery:project-prod.dataset.source_table"
},
"target": {
"fullyQualifiedName": "bigquery:project-prod.dataset.target_table"
},
"depth": 1,
"location": "us"
}
]
}
複数の地理的なロケーションを検索する
locations 反復配列フィールド内で渡される地理的リージョンを変更することで、リネージグラフのスキャンを制限または拡大できます。
次に例を示します。
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us", "europe-west1", "asia-south2"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.global_table"
}]
}
},
"direction": "DOWNSTREAM"
}'
リネージリンクのプロセス名を取得する
デフォルトでは、API はプロセス情報を省略します(maxProcessPerLink
のデフォルトは 0)。データリンクを作成した
パイプラインのリソース名を取得するには、limits.maxProcessPerLink をゼロ以外の正の
整数に構成します。
次に例を示します。
Java
Java
このサンプルを試す前に、クライアント ライブラリを使用した Data Lineage のクイックスタートにあるJava設定手順を行ってください。詳細については、 Data Lineage Java API リファレンス ドキュメントをご覧ください。
Data Lineage で認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、 ローカル開発環境の認証の設定をご覧ください。
REST
リクエストのデータを使用する前に、 次のように置き換えます。
BILLING_PROJECT_ID: 管理課金と割り当て評価に使用される Google Cloud プロジェクト。プロジェクト番号またはプロジェクト ID を指定します。LOCATION_ID:リネージ検索が実行される Google Cloud ロケーション。FULLY_QUALIFIED_NAME: ターゲット エンティティの完全修飾名(FQN)。形式はbigquery:PROJECT_ID.DATASET_ID.TABLE_IDです。
HTTP メソッドと URL:
POST https://datalineage.googleapis.com/v1/projects/BILLING_PROJECT_ID/locations/LOCATION_ID:searchLineageStreaming
リクエストの本文(JSON):
{
"parent": "projects/BILLING_PROJECT_ID/locations/LOCATION_ID",
"locations": [
"LOCATION_ID"
],
"rootCriteria": {
"entities": {
"entities": [
{
"fullyQualifiedName": "FULLY_QUALIFIED_NAME"
}
]
}
},
"direction": "UPSTREAM",
"limits": {
"maxProcessPerLink": 5
}
}
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスの動作: 結果のストリームは、絶対システム リソース名(projects/my-project/locations/us/processes/my-process
など)のみを含むプロセス メッセージで links[].processes フィールドに入力します。
FieldMask を使用して完全なプロセス詳細を取得する
リソース名だけでなく、パイプラインに関する完全な構造メタデータ(displayName、システム attributes、実行 origin
など)が必要な場合は、API FieldMask を使用する必要があります。
limits.maxProcessPerLinkにゼロ以外の値を指定します。fieldsクエリ パラメータを URL パスに追加し、他の必須フィールドとともにlinks.processes.processを指定します。
次に例を示します。
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST "https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming?fields=links.processes.process,links.source,links.target,links.depth" \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.target_table"
}]
}
},
"direction": "UPSTREAM",
"limits": {
"maxProcessPerLink": 5
}
}'
テーブルレベルと列レベルの両方のリネージを検索する
rootCriteria.entities.entities リストに複数のエンティティを指定することで、1 つのリクエストでテーブルレベル(アセットレベル)と列レベル(フィールドレベル)の両方のリネージを検索できます。
テーブルレベルのリネージの場合は、
field配列を省略します。列レベルのリネージの場合は、
field配列に 1 つの列を指定します。
次に例を示します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [
{
"fullyQualifiedName": "bigquery:my-project.dataset.table_a"
},
{
"fullyQualifiedName": "bigquery:my-project.dataset.table_b",
"field": ["email"]
}
]
}
},
"direction": "DOWNSTREAM"
}'
列レベルのリネージにワイルドカードを使用する
すべての列を個別にリストすることなく、特定のテーブルで使用可能なすべての列レベルのリネージを検索するには、ワイルドカード文字 * を field 配列の単一の値として使用します。
次に例を示します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table",
"field": ["*"]
}]
}
},
"direction": "DOWNSTREAM"
}'
リネージの結果をフィルタする
リクエスト本文の filters ブロックを使用すると、リネージ検索の結果を絞り込むことができます。
依存関係のタイプでフィルタする
結果を特定の依存関係タイプ(直接コピー(EXACT_COPY)やフィルタリングやグループ化などの変換(OTHER))に制限するには、dependencyTypes フィルタを使用します。
次に例を示します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"dependencyTypes": ["EXACT_COPY"]
}
}'
列レベルのリネージを除外する(テーブルのみの検索)
検索でテーブルレベルのリネージのみが返され、列レベルのリネージが完全に除外されるようにするには、entitySet フィルタを ENTITIES に設定します。
次に例を示します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"entitySet": "ENTITIES"
}
}'
期間でフィルタする
リネージ検索の結果を特定の時間間隔に制限できます。
たとえば、特定のタイムスタンプ以降に作成されたリネージデータを検索するには、次のリクエストを使用します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST https://datalineage.googleapis.com/v1/projects/my-billing-project/locations/us:searchLineageStreaming \
--data '{
"parent": "projects/my-billing-project/locations/us",
"locations": ["us"],
"rootCriteria": {
"entities": {
"entities": [{
"fullyQualifiedName": "bigquery:my-project.dataset.my_table"
}]
}
},
"direction": "DOWNSTREAM",
"filters": {
"timeRange": {
"startTime": "2026-01-01T00:00:00Z"
}
}
}'
トラブルシューティング: 到達できないロケーションと部分グラフを処理する
ストリーミング API は、分散されたプロジェクトとロケーションのセットを同時にスキャンするため、実行中に一部のリモート リージョンが一時的にダウンしたり、通信できなくなったり、構成が誤っている可能性があります。
症状: 返されたリネージグラフのレイアウトが不完全であるか、 想定されるリージョン ホップが欠落しています。
診断: データの完全性を保護するため、
searchLineageStreamingResponseストリームは、問題のあるロケーションを専用のunreachableフィールド(繰り返し文字列)に入力します。形式はprojects/PROJECT_NUMBER/locations/LOCATIONです(例:projects/123456789/locations/us-east1)。ベスト プラクティス: クライアント アプリケーションを常に構築して、グラフを処理する前にデータの完全性を確認するために
unreachableフィールドを調べます。