Knowledge Catalog を使用して Dataform のメタデータとデータリネージを管理する

このドキュメントでは、Knowledge Catalogを使用して、Dataform リポジトリのメタデータの表示、リポジトリへのアスペクトのアノテーション、Dataform ワークフロー実行のデータリネージの追跡を行う方法について説明します。

Knowledge Catalog を使用すると、メタデータを保存して管理できます。Dataform リポジトリは、追加の構成なしでデフォルトで Knowledge Catalog で使用できます。Knowledge Catalog は、Dataform リポジトリから次のメタデータを自動的に取得します。

  • データアセット名

  • データアセットの親

  • データアセットのロケーション

  • データアセットのタイプ

  • 対応する Google Cloud プロジェクト

  • サードパーティのリポジトリ ソース

  • サービス アカウント

始める前に

  1. Google Cloud コンソールのプロジェクト セレクタページで、 Google Cloud プロジェクトを選択または作成します。

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトを選択する際に、特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者のロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。

    プロジェクト セレクタに移動

  2. Dataplex API と Data Lineage API がまだ有効になっていない場合は、有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を確認する。

    API を有効にする

  3. 必要な Identity and Access Management(IAM)権限があることを確認します。

必要なロール

Dataform リポジトリを管理し、Knowledge Catalog でデータリネージを表示するには、Dataform リソースへのアクセス権を付与する事前定義された Dataform ロールと、必要な Knowledge Catalog ロールが必要です。

次の表に、各プリンシパルが Dataform データリネージを記録して表示するために必要なロールを示します。

タスク プリンシパル 必要なロール ロールを付与する場所
ワークフロー呼び出しからリネージを記録する リポジトリ、リリース構成、ワークフロー構成のカスタム サービス アカウント。カスタム サービス アカウントが設定されていない場合は、Dataform サービス エージェント(service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com)。 データリネージ イベント プロデューサー(roles/datalineage.producer) リポジトリが含まれているプロジェクト
Dataform CLI からリネージを記録する CLI が使用するアプリケーションのデフォルト認証情報 データリネージ イベント プロデューサー(roles/datalineage.producer) 各出力テーブルのプロジェクト
リネージグラフを表示する リネージを表示するユーザー データリネージ閲覧者(roles/datalineage.viewer) リネージが記録されるプロジェクトと、リネージを表示するプロジェクト
リネージグラフから Dataform を開く リネージを表示するユーザー Dataform 閲覧者(roles/dataform.viewer)、または dataform.repositories.get 権限と dataform.workflowInvocations.get 権限 リポジトリが含まれているプロジェクト
BigQuery テーブルの詳細を表示する リネージを表示するユーザー BigQuery データ閲覧者(roles/bigquery.dataViewer)または bigquery.tables.get 権限 テーブルを保存するプロジェクト
BigQuery ジョブの詳細を表示する リネージを表示するユーザー BigQuery リソース閲覧者(roles/bigquery.resourceViewer)または bigquery.jobs.get 権限 ジョブを実行するプロジェクト

データリネージ イベント プロデューサーのロールには、リネージの記録に必要な datalineage.locations.processOpenLineageMessage 権限が含まれています。

Knowledge Catalog でメタデータを管理する

Knowledge Catalog は、Dataform リポジトリを次の値を持つエントリとしてログに記録します。

システム エントリ グループ
Dataform リポジトリのシステム エントリ グループは @dataform です。Knowledge Catalog でリポジトリ エントリの詳細を表示するには、dataform システム エントリ グループを表示する必要があります。エントリ グループ内のすべてのエントリのリストを表示する方法については、Knowledge Catalog のドキュメントのエントリ グループの詳細を表示するをご覧ください。
システム エントリ タイプ
Dataform リポジトリのシステム エントリタイプは dataform-repository です。Dataform リポジトリの詳細を表示するには、dataform-repository システム エントリタイプを表示する必要があります。選択したエントリタイプの詳細を表示する手順については、Knowledge Catalog ドキュメントのエントリタイプの詳細を表示するをご覧ください。選択したエントリの詳細を表示する手順については、Knowledge Catalog ドキュメントのエントリの詳細を表示するをご覧ください。

アセットを検索する

Knowledge Catalog でデータアセットを検索する方法については、Knowledge Catalog ドキュメントの Knowledge Catalog でデータアセットを検索するをご覧ください。

リポジトリにアノテーションを付ける

Knowledge Catalog の Dataform リポジトリにコンテキストを追加するには、Dataform エントリにアスペクトをアノテーションします。

Dataform リポジトリのシステム アスペクト タイプは dataform-repository です。

エントリにアスペクトをアノテーションする方法については、Knowledge Catalog ドキュメントのアスペクトを管理してメタデータを拡充するをご覧ください。

Knowledge Catalog でデータリネージを追跡する

Dataform は、Dataform ワークフローと BigQuery パイプラインで実行するアクションのデータリネージを Knowledge Catalog に報告します。実行されたアクションごとに、Knowledge Catalog と BigQuery のリネージグラフに、アクションが読み取るテーブルと書き込むテーブル間の Dataform プロセスが表示されます。リネージを報告するために SQLX ファイルを変更する必要はありません。

Dataform データリネージは、次のタスクに使用できます。

  • 影響分析: テーブルを変更する前に、すべてのダウンストリーム アクションとテーブルを特定します。

  • 根本原因分析: 誤ったデータを、そのデータを書き込んだアクションとワークフロー呼び出しまで追跡します。

  • ガバナンス: プロジェクト間でデータがどのように流れるか、どのパイプラインがデータを移動したかを示します。

  • エンドツーエンドのリネージ: BigQuery、Managed Service for Apache Airflow、Managed Service for Apache Spark、Dataflow のリネージとともに、Dataform のリネージを 1 つのグラフで表示します。

データリネージの仕組み

Dataform は、アクションの開始時に OpenLineage START イベントを Data Lineage API に送信します。アクションが終了すると、Dataform は COMPLETE、FAIL、または ABORT イベントを送信します。各 Dataform アクションは、BIGQUERY_PIPELINES ソースタイプを持つプロセスとして Knowledge Catalog に表示され、アクションの各実行はそのプロセスの実行として表示されます。

次の表に、リネージを報告する Dataform アクション タイプを示します。

操作の種類 リネージを報告する
hasOutput: true を使用したテーブル、ビュー、増分テーブル、マテリアライズド ビュー、アサーション、プロパティ グラフ、データ準備、オペレーション はい。プロセス、実行、テーブル間のリネージリンクを報告します。
hasOutput: true を使用しないオペレーション 処理と実行のみ。入力と出力が空であるため、テーブル間のリネージリンクは作成されません。
宣言 いいえ。宣言は、他のアクションへの入力としてのみ表示されます。
Notebook、SQL 単体テスト いいえ

リネージの報告によってワークフローの呼び出しが失敗することはありません。Data Lineage API が無効になっている、権限がない、または割り当てを超過している場合、Dataform はリネージ レポートをスキップし、ワークフローの呼び出しは変更なしで続行されます。

Dataform は、各アクションの BigQuery 処理ロケーションのリージョン エンドポイントにリネージを書き込みます。リージョン エンドポイントが使用できない場合、Dataform はリネージをグローバル エンドポイントに書き込みます。

Dataform ワークフローがデータリネージにマッピングされる仕組み

次の表に、Dataform 実行エンティティが Knowledge Catalog データリネージ情報モデルにどのようにマッピングされるかを示します。

データリネージ オブジェクト Dataform の同等機能
プロセス Dataform アクション
実行 ワークフロー呼び出しでのアクションの 1 回の実行
リネージ イベント その実行の入力テーブルから出力テーブルへのリンク

データリネージを設定する

データリネージを報告するように Dataform を設定する手順は次のとおりです。

  1. Dataform リポジトリを含むプロジェクトと、ユーザーがリネージを表示するプロジェクトで、Data Lineage API(datalineage.googleapis.com)を有効にします。

  2. リポジトリを含むプロジェクトで、ワークフローを実行する ID にデータリネージ イベント プロデューサーのロール(roles/datalineage.producer)を付与します。

    • リポジトリ、リリース構成、またはワークフロー構成でカスタム サービス アカウントを使用する場合は、カスタム サービス アカウントにロールを付与します。

    • カスタム サービス アカウントが設定されていない場合は、Dataform サービス エージェント(service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com)にロールを付与します。

Google アカウントのユーザー認証情報で実行されるワークフロー呼び出しは、リネージを報告しません。

データリネージを有効または無効にする

最初のロールアウト期間中は、データリネージ レポートはオプトインです。

リポジトリまたは BigQuery パイプラインのデータリネージ レポートを制御するには、workflow_settings.yaml ファイルで lineage.enabled プロパティを設定します。

  1. Google Cloud コンソールで、[Dataform] ページに移動します。

    Dataform に移動

  2. リポジトリを選択し、開発ワークスペースを選択します。

  3. [Files] ペインで、workflow_settings.yaml ファイルを開きます。

  4. データリネージ レポートを有効にするには、次の lineage ブロックを追加します。

    lineage:
      enabled: true
    

    リネージがデフォルトで有効になった後に、リポジトリをデータリネージ レポートから除外するには、enabled を false に設定します。

    lineage:
      enabled: false
    
  5. 変更をリポジトリに commit して push します。

プロジェクト全体でデータリネージ レポートを停止するには、プロジェクトで Data Lineage API を無効にします。API を無効にすると、プロジェクト内の他のサービスからのデータリネージ レポートも停止します。

データリネージを表示する

Dataform アクションによって生成されたテーブルのデータリネージを表示する手順は次のとおりです。

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] ペインで、プロジェクトとデータセットを開き、Dataform アクションによって生成されるテーブルを選択します。

  3. [リネージ] タブをクリックします。

  4. アクション、リポジトリ、実行を表示するには、Dataform プロセスノードを選択します。

  5. Dataform でリポジトリを開くには、[Dataform で開く] をクリックします。

リネージグラフの操作の詳細については、Knowledge Catalog でデータリネージを表示するをご覧ください。

Dataform CLI からデータリネージを報告する

Dataform CLI のローカル実行または CI 実行からデータリネージを報告するには、workflow_settings.yaml で lineage.enabled: true を設定するか、次のコマンドを実行します。

dataform run --emit-lineage

--emit-lineage フラグと --no-emit-lineage フラグは、1 回の実行で lineage.enabled 設定をオーバーライドします。

Dataform CLI は、アプリケーションのデフォルト認証情報を使用し、各出力テーブルのプロジェクトにリネージを記録します。これらの各プロジェクトで、Data Lineage API を有効にし、データリネージ イベント プロデューサーのロール(roles/datalineage.producer)を認証情報に付与します。CLI は、[lineage] 接頭辞を付けてリネージ メッセージを stderr に書き込みます。

CLI からリネージを報告する方法については、GitHub の Dataform CLI リファレンスをご覧ください。

データリネージのトラブルシューティング

次の表に、一般的なデータリネージの問題とその修正方法を示します。

症状 考えられる原因 修正
[リネージ] タブに Dataform ノードが表示されない。 Data Lineage API が無効になっている。 リポジトリを含むプロジェクトと、リネージを表示するプロジェクトで API を有効にします。
リポジトリがリネージを報告しない。 ワークフローを実行する ID に、データリネージ イベント プロデューサーのロールがない。 カスタム サービス アカウントまたは Dataform サービス エージェントに roles/datalineage.producer を付与します。
ユーザー認証情報で実行されるワークフロー呼び出しは、リネージを報告しません。 リネージ レポートはユーザー認証情報をサポートしていません。 カスタム サービス アカウントを使用してワークフローを実行します。
ロールが付与されているにもかかわらず、リポジトリがリネージを報告しない。 Dataform がカスタム サービス アカウントとして機能できない。 カスタム サービス アカウントに対するサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を Dataform サービス エージェントに付与します。
1 つのリポジトリがリネージを報告しない。 リポジトリがオプトアウトされている。 lineage.enabled: false を workflow_settings.yaml から削除してください。
一部の実行でリネージが欠落している。 Data Lineage API の割り当てを超過している。 ワークフローの実行を分散するか、割り当ての増加をリクエストします。
CLI の実行で、一部のテーブルのリネージが報告されない。 出力テーブルのプロジェクトで API が有効になっていないか、ロールが付与されていない。 API を有効にして、そのプロジェクトでロールを付与します。
[Dataform で開く] をクリックすると、権限エラーが返されます。 ユーザーに Dataform へのアクセス権がない。 ユーザーに Dataform 閲覧者ロール(roles/dataform.viewer)を付与します。

ワークフロー呼び出しで最初の権限エラーまたは API エラーが発生すると、Dataform はそのワークフロー呼び出しの残りのリネージの報告を停止します。次のワークフロー呼び出しで、リネージの報告が再試行されます。

データリネージの問題についてサポートに問い合わせる場合は、ワークフロー呼び出し ID、プロジェクト ID、リージョンを記載してください。

ワークフロー呼び出しのリネージログを表示する

Cloud Logging では、Dataform はリネージ ログエントリを dataform.googleapis.com/lineage_emission ログに書き込みます。各エントリには、workflowInvocationId、actionTarget、eventType フィールドが含まれます。

ワークフロー呼び出しのリネージログを表示する手順は次のとおりです。

  1. Google Cloud コンソールで、ワークフロー呼び出しの詳細ページを開きます。

  2. [ログを表示] をクリックします。

    Logging が開き、jsonPayload.workflowInvocationId によるワークフロー呼び出しにフィルタされたログが表示されます。

各リネージ ログエントリの outcome フィールドには、次のいずれかの値が含まれます。

  • SUCCEEDED: Data Lineage API がイベントを受け入れました。これらのエントリの重大度は DEBUG で、eventType は START、COMPLETE、FAIL、ABORT のいずれかです。

  • SKIPPED: Dataform がリネージ レポートをスキップしました。これらのエントリの重大度は INFO で、ワークフロー呼び出しの理由ごとに 1 回ログに記録されます。skipReason フィールドが API_DISABLED、PERMISSION_DENIED、EUC_UNSUPPORTED、AUTHORITY_UNAVAILABLE のいずれかで、errorMessage フィールドに修復手順が含まれている。

  • FAILED: 再試行後にリネージ レポートが失敗しました。これらのエントリの重大度は WARNING で、errorCode フィールドと errorMessage フィールドが含まれています。

ログ エクスプローラでスキップされたリネージ レポートまたは失敗したリネージ レポートをフィルタするには、次のクエリを実行します。

log_id("dataform.googleapis.com/lineage_emission")
jsonPayload.outcome=("SKIPPED" OR "FAILED")

Dataform CLI からのデータリネージ メッセージ

Dataform CLI は、次のリネージ メッセージを stderr に書き込みます。

  • skip_reason=workflow_opt_out: lineage.enabled は false に設定されています。

  • skip_reason=invocation_override: --no-emit-lineage または --emit-lineage=false を使用したこの実行では、リネージ レポートがオフになっています。

  • skip_reason=dry_run: ドライランではリネージは報告されません。

  • skip_reason=api_disabled: Data Lineage API が有効になっていません。CLI は、この実行でこれ以上リネージ リクエストを送信しません。

  • skip_reason=permission_denied: 認証情報にデータリネージ イベント プロデューサーのロール(roles/datalineage.producer)がありません。CLI は、この実行でリネージ リクエストを送信しません。

  • Failed to emit lineage for action ...: : 1 つの アクションでリネージ レポートが失敗しました。他のアクションのリネージ レポートは継続されます。

制限事項

Knowledge Catalog で Dataform リポジトリを管理し、データリネージを追跡するには、次の制限があります。

  • Knowledge Catalog で使用できるのは、リポジトリレベルとワークフローレベルのエントリのみです。Dataform の個々のファイルレベルのコードアセット(SQLX 定義ファイルなど)は、個別のエントリとしてカタログ化されません。

  • Dataform はテーブルレベルのリネージのみを報告します。列レベルのリネージは報告されません。

  • 宣言、ノートブック、SQL 単体テストでは、リネージは報告されません。宣言は、他のアクションへの入力としてのみ表示されます。hasOutput: true のないオペレーションでは、プロセスと実行のみが報告され、テーブル間のリネージリンクは報告されません。

  • Google アカウントのユーザー認証情報で実行されるワークフロー呼び出しは、リネージを報告しません。リネージを報告するには、カスタム サービス アカウントを使用します。

  • データリネージ レポートは、プロジェクト、ID、リージョンごとの書き込みに関する Data Lineage API の割り当ての対象となります。標準ティアでは、割り当ては 1 分あたり約 1,000 アクションです。

ロケーション

Knowledge Catalog を使用すると、すべての Dataform ロケーションから Dataform リポジトリを管理できます。

割り当て

Knowledge Catalog で Dataform リポジトリを管理する場合は、Knowledge Catalog の割り当てと上限が適用されます。

料金

Knowledge Catalog で Dataform リポジトリを管理する場合は、Knowledge Catalog の料金が適用されます。

データリネージの取り込みは、Knowledge Catalog プレミアム処理 SKU で課金されます。テーブル間のリネージリンクを書き込むイベントのみが課金されます。データリネージ ストレージは、メタデータ ストレージ SKU で課金されます。データリネージの費用を管理するには、workflow_settings.yaml でワークフローをオプトアウトするか、Data Lineage API を無効にします。

次のステップ

  • Knowledge Catalog の詳細については、Knowledge Catalog のドキュメントの Knowledge Catalog の概要をご覧ください。