すべてのプロダクト
Search
ドキュメントセンター

DataWorks:DataWorks OpenAPI を使用したデータリネージのクエリ

最終更新日:Nov 27, 2025

このドキュメントでは、DataWorks OpenAPI (2024-05-18) を使用して、データテーブルとフィールドのリネージをプログラムでクエリする方法を説明します。具体的な API 呼び出しの例と SDK コードを提供し、迅速な利用開始と、自動化されたバッチリネージ分析の実行を支援します。

データリネージとは

重要なビジネスレポートで、今四半期の売上が大幅に増加したとします。慎重なデータアナリストやマネージャーであれば、いくつかの疑問が頭に浮かぶでしょう:

  • この「売上」メトリックはどのように計算されていますか?

  • ソースとなるビジネスデータは何ですか?注文テーブルからですか、それとも支払いトランザクションテーブルからですか?

  • データはソースから最終レポートに至るまで、クリーニング、変換、集約など、どのような処理ステップを経ていますか?

  • このメトリックのデータにエラーがある場合、どの下流のレポートやアプリケーションに影響しますか?

    image

明確なデータリネージは不可欠です。これには、次のようなコアとなる利点があります:

  1. データのトレーサビリティとトラブルシューティング
    データの異常やエラーを発見した場合、リネージを上流にトレースすることで、問題の原因となった処理ステップやソースデータを迅速に特定できます。これにより、トラブルシューティングの時間が大幅に短縮されます。

  2. 影響分析
    テーブルスキーマ、フィールド、または計算ロジックを変更する必要がある場合、リネージを下流に分析できます。これにより、どの下流のデータやビジネスレポートが影響を受けるかを正確に評価できます。これは、1 つの変更が広範囲にわたる問題を引き起こすという未知のリスクを回避するのに役立ちます。

  3. データガバナンスと信頼性
    明確なリネージは、データ資産管理、データ標準の実装、および Data Quality モニタリングの基盤です。これにより、データライフサイクル全体が透明になり、ビジネスユーザーのデータに対する信頼が高まります。

  4. コスト最適化と資産インベントリ
    リネージを分析することで、下流のコンシューマーがいないデータテーブルやコンピューティングタスクを特定できます。これは、データウェアハウスのコスト最適化や、古い資産を非公開にするための根拠となります。

DataWorks は、MaxCompute SQL や EMR Spark などのさまざまなコンピューティングタスクによって生成されたデータリネージを自動的に解析し、記録します。DataWorks OpenAPI を使用すると、このリネージ情報にプログラムでアクセスできます。その後、リネージ分析を独自のデータ管理プラットフォームや自動化された O&M プロセスに統合できます。

事前準備:エンティティ ID の取得

リネージをクエリする前に、まずターゲットデータ (テーブルまたはフィールド) の一意の識別子を取得する必要があります。この識別子は エンティティ ID です。エンティティ ID は、メタデータおよびリネージ関連の API を呼び出すためのコアとなる認証情報です。

エンティティ ID は、次の 2 つの方法のいずれかで取得できます:

1. DataWorks インターフェイスからの ID 取得

少数の既知のテーブルやフィールドの場合、インターフェイスから ID をコピーするのが最も速い方法です。

テーブルのエンティティ ID の取得

  1. DataWorks の [データマップ] モジュールに移動します。

  2. クエリしたいテーブルを検索し、その詳細ページを開きます。

  3. 左側の Table Basic Information パネルで Entity ID を見つけてコピーします。

    image

フィールドのエンティティ ID の取得

  1. テーブルの詳細ページで、[リネージ情報] タブに切り替え、[フィールドリネージ] を選択します。

  2. フィールドリネージグラフで、対象のフィールドノードをクリックします。

  3. 右側にフィールドの詳細パネルが表示されます。パネルで Entity ID を見つけてコピーします。

    image

2. API を使用した ID の一括取得

多くのエンティティ ID を取得する必要がある場合、手動での操作は非効率です。この場合、OpenAPI を使用してバッチクエリを実行できます:

ListLineages API によるリネージのクエリ

エンティティ ID を取得すると、コア ListLineages API を使用して、その上流および下流のリネージをクエリできます。

1. コア API パラメーター

次の表に、ListLineages API の主要なリクエストパラメーターを示します。API は OpenAPI Portal でオンラインでテストできます。

パラメーター

説明

SrcEntityId

String

下流リネージのクエリに使用します。ソース (上流) エンティティ ID を渡します。API はそのエンティティのすべての下流リネージを返します。

DstEntityId

String

上流リネージのクエリに使用します。宛先 (下流) エンティティ ID を渡します。API はそのエンティティのすべての上流リネージを返します。

SrcEntityName

String

DstEntityId と共に使用して、あいまい検索を実行し、上流エンティティをフィルターします。

DstEntityName

String

SrcEntityId と共に使用して、あいまい検索を実行し、下流エンティティをフィルターします。

NeedAttachRelationship

Boolean

応答に詳細なリネージ関係情報を含めるかどうかを指定します。完全なコンテキストを取得するには、これを true に設定します。

重要
  • SrcEntityIdDstEntityId の両方を指定した場合、API は指定された上流エンティティと下流エンティティ間のリネージ関係を返します。

  • SrcEntityIdDstEntityId が同じ場合、API はそのエンティティの自己参照リネージ関係を返します。

2. 呼び出し例

エンティティ IDmaxcompute-table:::test_project::test_table である MaxCompute テーブルがあるとします。

例 1:テーブルの下流リネージのクエリ

このテーブルのすべての下流テーブルをクエリするには、これをソースとして設定する必要があります:

  • SrcEntityIdmaxcompute-table:::test_project::test_table

  • NeedAttachRelationshiptrue

名前に "report" を含む下流テーブルのみを検索するには、DstEntityName パラメーターを追加します:

  • DstEntityNamereport

例 2:テーブルの上流リネージのクエリ

どのテーブルまたはタスクがこのテーブルを生成したかを調べるには、これを宛先として設定する必要があります:

  • DstEntityIdmaxcompute-table:::test_project::test_table

  • NeedAttachRelationshiptrue

SrcEntityName パラメーターを使用して上流ソースをフィルターすることもできます。

3. API 応答の理解

ListLineages の呼び出しが成功すると、リネージ関係のリストが返されます。各関係には、ソースエンティティ、宛先エンティティ、およびそれらの関連情報が含まれます。

単一のリネージ関係応答の例 (JSON):

{
  "SrcEntity": {
    "Id": "maxcompute-table:::test_project::table_from",
    "Name": "table_from",
    "Attributes": {
      "rawEntityId": "maxcompute-table:::test_project::table_from"
    }
  },
  "DstEntity": {
    "Id": "maxcompute-table:::test_project::table_to",
    "Name": "table_to",
    "Attributes": {
      "project": "test_project",
      "region": "cn-shanghai",
      "table": "table_to"
    }
  },
  "Relationships": [
    {
      "Id": "123456789:maxcompute-table.test_project.table_from:maxcompute-table.test_project.table_to:maxcompute.SQL.76543xxx",
      "CreateTime": 1761089163548,
      "Task": {
        "Id": "76543xxx",
        "Type": "dataworks-sql",
        "Attributes": {
          "engine": "maxcompute",
          "channel": "1st",
          "taskInstanceId": "12345xxx",
          "projectId": "123456",
          "taskId": "76543xxx"
        }
      }
    }
  ]
}

応答の読み方:

  • SrcEntityDstEntity:これらはリネージの上流エンティティと下流エンティティを表します。これらの Id を取得し、GetTable または GetColumn API を呼び出して、より詳細なメタデータを取得できます。

  • Relationships:これは SrcEntityDstEntity がどのように関連しているかを説明します。

    • Task:これは、このリネージ関係を生成したタスクを説明します。タスクが DataWorks のスケジューリングタスクである場合、Task.Attributes には taskIdtaskInstanceId が含まれます。これらの ID を使用して GetTask API を呼び出し、タスクの詳細な定義と実行ステータスを取得できます。

Java SDK 実践チュートリアル

次の例では、Java SDK を使用して、リネージクエリの完全なプロセスを示します。

1. 環境の準備

  • JDK バージョン:JDK 8 以降のバージョンがインストールされていることを確認してください。

  • Maven 依存関係:プロジェクトの pom.xml ファイルに次の依存関係を追加します。${latest.version}最新の SDK バージョン番号 に置き換えてください。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dataworks_public20240518</artifactId>
    <version>${latest.version}</version>
</dependency>

2. 完全なコード例

次のコードは、クライアントを初期化し、指定されたテーブルの上流および下流のリネージをクエリし、主要な情報を出力する方法を示しています。

import java.util.List;
import java.util.Map;

import com.aliyun.dataworks_public20240518.Client;
import com.aliyun.dataworks_public20240518.models.GetTableRequest;
import com.aliyun.dataworks_public20240518.models.GetTableResponse;
import com.aliyun.dataworks_public20240518.models.LineageEntity;
import com.aliyun.dataworks_public20240518.models.LineageRelationship;
import com.aliyun.dataworks_public20240518.models.LineageTask;
import com.aliyun.dataworks_public20240518.models.ListLineagesRequest;
import com.aliyun.dataworks_public20240518.models.ListLineagesResponse;
import com.aliyun.dataworks_public20240518.models.ListLineagesResponseBody.ListLineagesResponseBodyPagingInfo;
import com.aliyun.dataworks_public20240518.models.ListLineagesResponseBody.ListLineagesResponseBodyPagingInfoLineages;
import com.aliyun.dataworks_public20240518.models.Table;
import com.aliyun.tea.TeaException;

public class LineageQuerySample {
  /**
     * 説明