dbt Core からメタデータをインポートする

データ エンジニア、分析エンジニア、データ スチュワードにとって、メタデータの一元化はエンタープライズ データ検出とガバナンスに不可欠です。チームがデータ変換に dbt を使用すると、運用、セマンティック、リネージの貴重なメタデータが生成されますが、多くの場合、dbt エコシステム内にサイロ化されたままになります。

この情報を一元化されたカタログに統合するには、dbt Core、dbt Cloud、MetricFlow から Knowledge Catalog(以前の Dataplex Universal Catalog)にメタデータをインポートします。

dbt Core は、Oracle や PostgreSQL などのストレージ システムではなく変換エンジンとして動作するため、メタデータをインポートするとさまざまなユースケースが可能になります。Oracle または PostgreSQL のメタデータをインポートして「どのような生データがあるか?」という質問に答え、dbt Core のメタデータをインポートして「データはどのように変換され、信頼性はどの程度か、ビジネスにとってどのような意味があるか?」という質問に答えます。

このドキュメントでは、Google Cloud CLI コマンドと dbt アーティファクト ファイルを使用してメタデータをインポートする方法について説明します。

dbt 統合を実行すると、次のメタデータがキャプチャされます。

  • テクニカル メタデータ: 主要なリソース(ソース、シード、モデル)とその技術的なプロパティ(列名、データ型、行数)を調べて、エンタープライズ データを検出します。
  • ビジネス メタデータとセマンティック メタデータ: dbt MetricFlow を活用したビジネス定義とロジック(セマンティック モデル、指標、保存されたクエリなど)を探索して、BI ツールと AI エージェントのコンテキストを提供します。
  • 運用メタデータとデータ品質メタデータ: タイミング、成功または失敗のステータス、データの更新速度、テスト結果などの実行メタデータを調べて、パイプラインの健全性をモニタリングし、データの問題をトラブルシューティングします。
  • リネージと関係メタデータ: 変換グラフ(DAG)と dbt リソース間の依存関係、物理変換ブロック、結合キーと動的結合、親子関係を追跡してリンクする物理リネージを探索することで、ダウンストリームの影響分析と根本原因の追跡を可能にします。
  • 使用状況のメタデータ: dbt の外部でデータがどのように使用されるかをマッピングするエクスポージャーでキャプチャされたメタデータを調べて、ダウンストリーム アプリケーションが変換されたデータをどのように使用するかに関する問題をトラブルシューティングします。

制限事項

  • dbt Core v1(バージョン 1.11 と 1.12 で検証済み)、dbt Core v2、dbt Fusion をサポートしています。
  • gcloud CLI バージョン 586.0.0 以降では、dbt と BigQuery の統合がサポートされています。CLI をインストールまたは更新するには、Google Cloud CLI CLI をインストールするをご覧ください。
  • dbt Cloud に直接接続することはありません。dbt Cloud ジョブからメタデータをインポートするには、まずジョブのアーティファクトを取得します。dbt Cloud の実行からメタデータをインポートするをご覧ください。
  • 非常に大きなスキーマや深くネストされたスキーマは切り捨てられます。1 つのアスペクトがアスペクトあたりのサイズ上限を超えることはないため、深くネストされたスキーマでは末尾のフィールドが失われる可能性があります。
  • --aspects-only はメタデータの追加と更新はできますが、削除はできません。dbt リソースを削除するには、完全な実行が必要です。
  • この統合は、Data Lineage API とグラフの BigQuery リソースの dbt リネージ イベントのみをサポートします。外部のサードパーティ ソースの dbt エントリ(ソース、シード、モデル)は、データ リネージにキャプチャされません。

始める前に

dbt Core と MetricFlow からメタデータをインポートする前に、次のタスクを完了します。

  1. 必要なロールと権限を付与します。
  2. Knowledge Catalog API を有効にします。
  3. dbt の前提条件を満たします。
  4. 宛先エントリ グループがまだ存在しない場合は、作成します。
  5. Cloud Storage のロールを理解する。

IAM のロールと権限

Knowledge Catalog コネクタ ジョブを作成して管理するには、Knowledge Catalog と Cloud Storage の権限を付与する Identity and Access Management(IAM)ロールが必要です。

dbt コネクタの構成に必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。

プロジェクトで IAM アクセスを管理するのに必要な権限がある場合は、次の gcloud コマンドを実行して、これらのロールを自分のユーザー アカウントに付与できます。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:USER_EMAIL" \
    --role="roles/dataplex.metadataJobOwner"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:USER_EMAIL" \
    --role="roles/dataplex.entryGroupOwner"

gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET \
    --member="user:USER_EMAIL" \
    --role="roles/storage.objectCreator"

自動化された CI/CD パイプラインなどでサービス アカウントを使用してインポートを実行する場合は、次の gcloud コマンドを実行して、これらのロールをサービス アカウントに付与できます。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role="roles/dataplex.metadataJobOwner"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role="roles/dataplex.entryGroupOwner"

gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET \
    --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
    --role="roles/storage.objectCreator"

また、インポート ジョブがステージングされたメタデータ ファイルを読み取れるように、出力ステージング Cloud Storage バケット(--storage-uri)に対する Storage オブジェクト閲覧者(roles/storage.objectViewer)ロールを Knowledge Catalog サービス エージェント(service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com)に付与する必要があります。

gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com" \
    --role="roles/storage.objectViewer"

次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • USER_EMAIL: ユーザー アカウントのメールアドレス。
  • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。
  • STAGING_BUCKET: 出力ステージング Cloud Storage バケットの名前(--storage-uri)。
  • PROJECT_NUMBER: Google Cloud プロジェクトの番号。

ロールの付与の詳細については、アクセスの管理をご覧ください。

API を有効にする

Knowledge Catalog API を有効にします。

API の有効化

dbt の前提条件

dbt メタデータの完全なセットをインポートするには、4 つの dbt JSON アーティファクト ファイルをすべて生成することをおすすめします。manifest.json のみが必要です。他のものはインポートを強化するもので、それらがなくても変換は正常に機能します。

  • manifest.json (必須): コア プロジェクトの構造と実行グラフ。MetricFlow のセマンティック モデル、指標、保存済みクエリも含まれます。
  • catalog.json: 列名とデータ型。catalog.json がないと、スキーマ アスペクトは型指定されていない列とともにインポートされます。
  • run_results.json: テスト結果と実行メタデータ。
  • sources.json: ソースの鮮度。

dbt がインストールされているローカル ターミナル、Cloud Shell、または自動化された CI/CD 環境で、dbt プロジェクトのルート ディレクトリに移動し、単一のプロファイルとターゲットに対して次の dbt コマンドを順番に実行して、dbt メタデータ アーティファクト JSON ファイルの完全なセットを生成します。

  • dbt Core 2.x と dbt Fusion の場合:

    1. dbt source freshness
    2. dbt build
    3. dbt parse --write-catalog

  • dbt Core 1.x の場合(dbt parse がカタログを書き込まない場合):

    1. dbt source freshness
    2. dbt build
    3. dbt docs generate --no-compile

Cloud Storage のロールについて

dbt メタデータのインポートには、異なる目的で使用される 2 つの異なる Cloud Storage ロケーションが関係します。これらを混同しないでください。

  • 入力(dbt ソース アーティファクト): 生成された dbt JSON ファイルが存在する場所。これは、マシンまたは CI ランナー(./target/ や . など)のローカル ディレクトリ パス、または入力 Cloud Storage バケット URI 接頭辞(gs://my-dbt-artifacts-bucket/target/ など)にできます。このパスは --artifacts-path フラグを使用して指定します。gcloud コマンドは、ジョブの準備中にこれらの入力ファイルを読み取ります。Cloud Storage を使用する場合、gcloud コマンドを実行する呼び出し元には読み取りアクセス権(roles/storage.objectViewer または roles/storage.objectAdmin)が必要です。Knowledge Catalog サービス エージェントは、入力アーティファクト バケットにアクセスする必要はありません。
  • 出力(Knowledge Catalog インポート ステージング バケット): gcloud コマンドが変換されたメタデータ インポート ファイル(dbt_metadata.jsonl)をアップロードする Cloud Storage バケット URI 接頭辞(gs://my-staging-bucket/dbt-imports/ など)。Knowledge Catalog インポート ジョブは、取り込み中にこの接頭辞から読み取ります。この URI は --storage-uri フラグを使用して指定します。gcloud コマンドを実行する呼び出し元には、ファイルをアップロードするための書き込みアクセス権(roles/storage.objectCreator または roles/storage.objectAdmin)が必要です。また、Knowledge Catalog サービス エージェントには、ファイルをインポートするための読み取りアクセス権(roles/storage.objectViewer)が必要です。

dbt Cloud の実行からメタデータをインポートする

Knowledge Catalog は dbt Cloud に直接接続しません。dbt Cloud ジョブは dbt Core と同じアーティファクト ファイルを生成するため、これらのアーティファクト ファイルをローカル ディレクトリまたは入力 Cloud Storage バケットに取得し、gcloud コマンドを実行することで、dbt Cloud からメタデータをインポートできます。

アーティファクトを取得する前に、完全なアーティファクト セットを生成するように dbt Cloud ジョブを構成します。アーティファクト ファイルは、次のいずれかの方法で dbt Cloud ジョブ実行から取得できます。

dbt Cloud ジョブを設定する

dbt Google Cloud コンソールで、メタデータ アーティファクトの完全なセットを生成するようにジョブ設定を構成します。

  1. [実行設定] セクションで、[ソースの更新を実行] を選択します。dbt Cloud は、ジョブ コマンドの前に dbt source freshness を実行して sources.json を生成します。
  2. [コマンド] セクションで、dbt build を追加します。
  3. リリース トラックに基づいて catalog.json を生成するコマンドを追加します。
    • dbt Core 2.x と dbt Fusion リリース トラックの場合: dbt parse --write-catalog をジョブ コマンドとして追加します。
    • dbt Core 1.x リリース トラックの場合: [実行時にドキュメントを生成する] オプションを選択する代わりに、dbt docs generate --no-compile をジョブ コマンドとして追加します。[Generate docs on run] チェックボックスをオンにすると、--no-compile なしで dbt docs generate が実行され、dbt の前提条件で説明されているように、dbt build のテスト結果が上書きされます。コマンド ステップが失敗するとジョブも失敗しますが、チェックボックス ステップではジョブは失敗しません。

テストが失敗するなどして dbt build が失敗した場合、dbt Cloud はそれ以降のコマンドをスキップし、実行に catalog.json が含まれません。常に 1 つ生成するには、dbt build の前にカタログ コマンドを追加します。カタログには、ビルド前のテーブルの説明が記載されます。

詳細については、dbt ドキュメントのジョブ コマンドとリリース トラックをご覧ください。

dbt Google Cloud コンソールからアーティファクトをダウンロードする

dbtGoogle Cloud コンソールで完了した実行からアーティファクトを手動でダウンロードするには:

  1. dbt Google Cloud コンソールで、完了したジョブ実行を開きます。
  2. [アーティファクト] タブに移動して、生成されたアーティファクト ファイルを表示します。
  3. manifest.json、catalog.json、run_results.json、sources.json をローカル ディレクトリにダウンロードします。
  4. ローカル ターミナルまたは Cloud Shell で、dbt 接続を構成するで説明されている gcloud インポート コマンドを実行し、--artifacts-path をダウンロードしたファイルを含むディレクトリに設定します。

詳細については、dbt ドキュメントの実行の可視性をご覧ください。

dbt プラットフォーム CLI を使用してアーティファクトをダウンロードする

dbt プラットフォーム CLI(以前の dbt Cloud CLI)は、ローカル ターミナルから dbt Cloud プラットフォームで dbt コマンドを実行し、生成されたアーティファクトをローカル dbt プロジェクトの target/ ディレクトリに自動的にダウンロードします。

  1. ローカル ターミナルで、dbt プロジェクトのルート ディレクトリに移動し、dbt の前提条件に記載されている 3 つのコマンドを実行します。
  2. dbt 接続を構成するで説明されている gcloud インポート コマンドを実行し、--artifacts-path をプロジェクト ルートまたは target/ ディレクトリに設定します。

CLI は、個人のデータ ウェアハウスの認証情報を使用して開発環境内で実行されるため、生成されたメタデータには、スケジュールされたジョブによって構築された本番環境テーブルではなく、開発スキーマが反映されます。テストまたは開発ワークフローには CLI を使用し、本番環境のインポートのスケジュール設定にはデプロイ ジョブを使用します。

詳細については、dbt ドキュメントの dbt プラットフォーム CLI をインストールするをご覧ください。

dbt 管理 API を使用してアーティファクトをダウンロードする

dbt 管理 API を使用すると、完了したジョブ実行からアーティファクトをプログラムで取得できます。List Run Artifacts エンドポイントは、実行によって生成されたファイルパスを返します。Retrieve Run Artifact エンドポイントは、次の URL から特定のアーティファクト ファイルをダウンロードします。

https://ACCESS_URL/api/v2/accounts/ACCOUNT_ID/runs/RUN_ID/artifacts/FILE

ACCESS_URL は、dbt Cloud アカウントをホストするリージョンによって異なります。dbt Cloud サービス トークンを使用してリクエストを認証します。詳細については、dbt ドキュメントの次のページをご覧ください。

ローカル ターミナル、Cloud Shell、または自動化されたワークフロー環境から、manifest.json、catalog.json、run_results.json、sources.json をローカル ディレクトリまたは Cloud Storage バケットにダウンロードし、そのパスに対して dbt 接続を構成するで説明されている gcloud コマンドを実行します。

デフォルトでは、step クエリ パラメータを指定しない限り、アーティファクト エンドポイントは実行の最終ステップのアーティファクトを返します。dbt Cloud ジョブを設定するで説明されているようにジョブを構成する場合、最終ステップは dbt parse --write-catalog または dbt docs generate --no-compile です。このステップでは、catalog.json のみが書き込まれ、他の 3 つのアーティファクトはデフォルトのステップでそのまま残されます。

実行 ID を取得する

特定の実行のアーティファクトをダウンロードするには、その実行 ID が必要です。実行 ID は、dbt Google Cloud コンソールの実行 URL からコピーできます。また、ターミナルまたはワークフロー スクリプトから API をクエリして、ジョブの最新の成功した実行を取得することもできます。

GET https://ACCESS_URL/api/v2/accounts/ACCOUNT_ID/runs/?job_definition_id=JOB_ID&status=10&order_by=-finished_at&limit=1

クエリ パラメータでは、status=10 は Success ステータスの完了した実行をフィルタします。このエンドポイントをスケジュールに従ってポーリングして、最新の成功した実行を特定し、そのアーティファクトをダウンロードして、gcloud インポート コマンドを実行できます。

Webhook を使用してインポートをトリガーする

API をポーリングする代わりに、ジョブの実行が完了するたびに自動メタデータ インポートをトリガーするように dbt Cloud Webhook を構成できます。Webhook は、指定した HTTP エンドポイントにペイロードを送信します。

  1. dbt Google Cloud コンソールで、[アカウント設定] > [Webhook] に移動し、[Webhook を作成](または [新しい Webhook を作成])をクリックします。Webhook サブスクリプションを構成します。
    • イベント: [実行完了](job.run.completed)を選択します。これは、実行が完了し、アーティファクトをダウンロードできるようになってからのみトリガーされます。
    • ジョブ: モニタリングする dbt Cloud デプロイ ジョブを選択します。
    • エンドポイント: 実行するサービス(Cloud Run サービスや Cloud Run functions など)の HTTPS URL を入力します。
  2. dbt Cloud に表示される Webhook シークレット トークンを保存します。サービスはこのシークレットを使用して、リクエスト本文の HMAC-SHA256 署名を含む Authorization ヘッダーを検証します。
  3. サービスで、JSON ペイロードから data.runId を読み取り、前述のように Administrative API を使用して実行のアーティファクトをダウンロードし、gcloud alpha dataplex dbt metadata-jobs create コマンドを実行します。

Webhook ハンドラを実装する際は、次の点を考慮してください。

  • dbt Cloud は、レスポンスを最大 10 秒間待機します。メタデータのインポートには数分かかるため、最初に HTTP レスポンスを返し、バックグラウンドでインポートを実行します(Cloud Run ジョブとして、または --async フラグを使用してなど)。
  • job.run.completed は失敗した実行でもトリガーされるため、テストが失敗した実行もインポートされます。job.run.errored に登録しないでください。実行のアーティファクトが使用可能になる前にトリガーされる可能性があります。

Webhook ペイロードと署名検証の詳細については、dbt ドキュメントのジョブの Webhook をご覧ください。

dbt 接続を構成する

dbt 接続を確立するには、まず適切な dbt コマンドを実行してメタデータ アーティファクトを生成する必要があります。JSON ファイルが保存され、アクセス可能になると、インポート プロセスで次のアクションが実行されます。

  1. 入力アーティファクトを読み取る: dbt Core と MetricFlow によって生成された JSON アーティファクトを、入力の場所(--artifacts-path で指定されたローカル ディレクトリまたは Cloud Storage URI)から読み取ります。
  2. メタデータを変換する: コンテンツを Knowledge Catalog メタデータ インポート形式(dbt_metadata.jsonl)に変換します。
  3. ステージングにアップロード: 変換されたメタデータ インポート ファイルを、--storage-uri で指定された出力ステージングの Cloud Storage の場所にアップロードします。
  4. インポート ジョブをトリガーする: Knowledge Catalog サービス エージェントに、--storage-uri からステージングされたメタデータを読み取って Knowledge Catalog リソースに取り込むよう指示する Knowledge Catalog メタデータ インポート ジョブをトリガーします。

コンソール

  1. Google Cloud コンソールで、[Knowledge Catalog] > [コネクタ] ページに移動します。

    [コネクタ] に移動

  2. [Add connection] をクリックします。

  3. [コネクタ] リストで、[dbt Core と MetricFlow] カードを選択します。

  4. インポートした dbt アセットを表示するには、[検索] ページに移動するか、宛先のエントリ グループ ページを表示します。

gcloud

dbt メタデータ ジョブを作成する手順は次のとおりです。

  1. dbt メタデータ アーティファクト ファイルがローカルまたは入力 Cloud Storage バケットに保存されていることを確認します。
  2. 呼び出し元と Knowledge Catalog サービス エージェントの両方に適切な権限が構成された出力ステージング Cloud Storage バケットがあることを確認します。
  3. Cloud Shell、ローカル ターミナル、または自動ワークフロー ツールから、gcloud コマンドを実行します。

    gcloud alpha dataplex dbt metadata-jobs create my-dbt-import \
        --project=my-project \
        --location=us-central1 \
        --artifacts-path=. \
        --entry-group=dbt-metadata-ingestion \
        --storage-uri=gs://my-bucket/dbt-imports/
    

    必須フラグ

    • --storage-uri=STORAGE_URI: 変換された JSONL がアップロードされる (出力/ステージング)Cloud Storage URI 接頭辞(gs://bucket/path/)。インポート ジョブは、取り込み中にこの接頭辞から読み取ります。呼び出し元には書き込みアクセス権(roles/storage.objectCreator または roles/storage.objectAdmin)が、Knowledge Catalog サービス エージェントには読み取りアクセス権(roles/storage.objectViewer)が必要です。

    オプション フラグ

    • --artifacts-path=ARTIFACTS_PATH: (入力)移行元 dbt アーティファクトのパス。これは、ローカル ディレクトリ パス(. や ./target など)または Cloud Storage URI 接頭辞(gs://my-bucket/dbt-artifacts/ など)にできます。dbt プロジェクトのルート(target/ サブディレクトリは自動的に検出されます)または manifest.json を含むディレクトリを直接指定できます。デフォルトは . です。Cloud Storage URI が指定されている場合、呼び出し元は入力バケットに対する読み取りアクセス権(roles/storage.objectViewer または roles/storage.objectAdmin)を持っている必要があります。
    • --async: 処理中のオペレーションの完了を待たずに、直ちにコマンドを終了します。
    • --entry-group=ENTRY_GROUP: dbt エントリを受け取るエントリ グループの短い ID。プロジェクトとロケーションにすでに存在している必要があります(デフォルトは dbt-metadata-ingestion)。
    • --aspects-only: この dbt 実行で検出されたメタデータのみを更新し、エントリ グループの残りの部分は変更しません。エントリの作成、削除、親の変更は行われず、エントリリンクは出力されません。この実行で dbt アーティファクトがなかったアスペクトは、前の実行で指定された値を保持します。これは、定期的な繰り返し取り込みに使用します。取り込みを再実行するをご覧ください。
    • --include-entry-links: dbt 関係のエントリリンクを出力します。これはデフォルトで有効です。無効にするには、--no-include-entry-links を使用します。このコマンドは、次のエントリ リンクタイプを出力します。
      • reference: あるリソースが別のリソースに依存している、別のリソースを記述している、別のリソースを使用している。これには、ノード間の dbt 依存関係、テストとそのテスト対象のリソース、セマンティック モデルまたは指標とその構築元となるリソース、ノードとその呼び出し元のプロジェクト マクロ、ノードとそのマテリアライズ先の BigQuery テーブルが含まれます。
      • schema-join: dbt relationships テストで宣言された結合可能な列。
    • --skip-bigquery-link: reference リンク(dbt ノード → 物理 BigQuery テーブル)をスキップします。デフォルトでは、BigQuery データセットがインポート場所(--location)にあるマテリアライズされた各 dbt ノード(モデル、シード、スナップショット)に対して reference リンクが発行されます。dbt ソースは、BigQuery テーブルへの reference リンクを受け取りません。エントリ リンクは同じリージョン内の @bigquery エントリのみを参照できるため、別のリージョンにあるデータセットは自動的にスキップされます。各データセットのリージョンを特定するために、コマンドは BigQuery API を呼び出します。そのため、呼び出し元にはこれらのデータセットに対する bigquery.datasets.get 権限が必要です。この権限がないと、コマンドは他のリージョンのデータセットをスキップできず、それらへのリンクを解決できません。BigQuery テーブルが Knowledge Catalog にカタログ登録されていない場合は、--skip-bigquery-link を使用します。
    • --validate-only: JSON を作成してアップロードし、メタデータ ジョブを検証しますが、実際には取り込みません。
  4. ステータスが Created になっていることを確認します。

REST

REST API を使用して dbt メタデータをインポートするには:

  1. dbt アーティファクトを生成し、Knowledge Catalog JSON インポート ファイル(dbt_metadata.jsonl)に変換します。
  2. 変換されたファイルを Cloud Storage ステージング バケット(gs://BUCKET_NAME/PATH/)にアップロードします。
  3. projects.locations.metadataJobs.create メソッドを呼び出します。

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/metadataJobs?metadataJobId=JOB_ID \
        -d '{
          "type": "IMPORT",
          "importSpec": {
            "sourceStorageUri": "gs://BUCKET_NAME/PATH/",
            "entrySyncMode": "FULL",
            "aspectSyncMode": "INCREMENTAL",
            "scope": {
              "entryGroups": [
                "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP"
              ],
              "entryTypes": [
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-project",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-model",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-source",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-seed",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-snapshot",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-group",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-exposure",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-metric",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-macro",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-semantic-model",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-saved-query",
                "projects/dataplex-connector-types/locations/global/entryTypes/dbt-test"
              ],
              "aspectTypes": [
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-node",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-project",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-model",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-source",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-seed",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-snapshot",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-group",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-exposure",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-metric",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-macro",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-semantic-model",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-saved-query",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-data-quality",
                "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-model-contracts"
              ]
            }
          }
        }'
    

    次のように置き換えます。

    • PROJECT_ID: エントリ グループが配置されている Google Cloud プロジェクト ID。
    • LOCATION: エントリ グループのリージョン(例: us-central1)。
    • JOB_ID: メタデータ ジョブの固有識別子。
    • BUCKET_NAME/PATH: dbt_metadata.jsonl がアップロードされた Cloud Storage URI 接頭辞。
    • ENTRY_GROUP: 宛先エントリ グループの短い ID。
  4. インポート ジョブのステータスを追跡するには、projects.locations.metadataJobs.get メソッドを使用します。

    curl -X GET \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/metadataJobs/JOB_ID
    

ジョブを作成すると、Knowledge Catalog は構成に従って初回実行をスケジュール設定するか、手動で開始できます。

取り込みを再実行する

最初のインポートの後、ほとんどの実行では、すでに存在するリソースのメタデータを更新するだけで済みます。これらの実行には --aspects-only を使用します。dbt 実行で検出されたもののみが更新され、エントリ グループ内の他のものはそのまま残されるため、任意のスケジュールで、複数のジョブから繰り返し実行しても安全です。

エントリのセットが変更された場合は、完全な取り込みを実行します(--aspects-only は省略)。

  • エントリ グループへの最初の取り込み。
  • dbt リソースが追加、名前変更、削除された。
  • エントリの表示名、説明、ラベルが変更された場合。
  • エントリ階層が変更されます。
  • dbt の依存関係が変更された場合(ref()、source()、テスト、マクロ呼び出しが追加または削除された場合など)。--aspects-only の実行では、エントリリンクは作成または更新されません。
  • --include-entry-links または --skip-bigquery-link を変更します。

フル実行では、ディスク上のアーティファクトからすべてのエントリの必要な側面が書き換えられるため、パイプラインで生成できる限り完全なアーティファクト セットから実行します。

定期的な更新には --aspects-only を実行します。

  • パイプラインが実行する dbt コマンド(dbt build、dbt test、dbt source freshness、または --select で絞り込んだ再ビルド)の後。
  • 列が追加、削除、再入力、再記述された。
  • モデルの SQL が変更され、実行時に catalog.json も書き込まれました。
  • 新しいテスト結果またはソースの鮮度。

--aspects-only はメタデータの追加と更新はできますが、削除はできません。

dbt メタデータを検索して表示する

コンソール

  1. Google Cloud コンソールで、[Knowledge Catalog] の [検索] ページに移動します。

    [検索] に移動

  2. [フィルタ] パネルで、dbt アセットをフィルタします。

    • [システム] セクションで、[インポートされたコンテキスト] を選択します。
    • 表示された [マネージド コネクタ] サブセクションで、[dbt] を選択します。
  3. 検索フィールドに、キーワード検索または自然言語検索を使用してクエリを入力します。たとえば、キーワード検索を使用してすべての dbt アセットを表示するには、「system=DBT」または「system=DBT AND type=dbt-model」と入力します。

  4. 検索結果で、任意の dbt アセットをクリックしてエントリの詳細ページを開き、スキーマ、リネージ、技術的な側面を表示します。

gcloud

  1. プロジェクト全体で dbt エントリを検索するには、gcloud dataplex entries search コマンドを使用します。

    gcloud dataplex entries search 'system=DBT' \
        --project=PROJECT_ID
    

    特定の dbt エントリ タイプ(モデルやソースなど)でフィルタするには:

    gcloud dataplex entries search 'system=DBT AND type=dbt-model' \
        --project=PROJECT_ID
    
  2. 特定の dbt エントリの詳細と側面を表示するには、gcloud dataplex entries lookup コマンドを使用します。

    gcloud dataplex entries lookup ENTRY_ID \
        --project=PROJECT_ID \
        --location=LOCATION \
        --entry-group=ENTRY_GROUP \
        --view=FULL
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • LOCATION: エントリ グループのロケーション(例: us-central1)。
    • ENTRY_GROUP: 宛先エントリ グループの短い ID(例: dbt-metadata-ingestion)。
    • ENTRY_ID: dbt エントリの短い ID または相対リソース名。

REST

  1. dbt エントリを検索するには、projects.locations:searchEntries メソッドを呼び出します。

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/global:searchEntries \
        -d '{
          "query": "system=DBT"
        }'
    

    特定の dbt リソースタイプでフィルタするには:

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/global:searchEntries \
        -d '{
          "query": "system=DBT AND type=dbt-model"
        }'
    
  2. 特定のエントリの完全なメタデータ詳細とアスペクトを取得するには、projects.locations.entryGroups.entries.get メソッドを呼び出します。

    curl -X GET \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP/entries/ENTRY_ID?view=FULL
    
  3. 特定の dbt リソースの LLM コンテキストを取得するには、projects.locations:lookupContext API を使用します。

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:lookupContext \
        -d '{
          "resources": [
            "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP/entries/ENTRY_ID"
          ]
        }'
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • LOCATION: エントリ グループのロケーション(例: us-central1)。
    • ENTRY_GROUP: 宛先エントリ グループの短い ID(例: dbt-metadata-ingestion)。
    • ENTRY_ID: dbt エントリの短い ID または相対リソース名。

dbt エントリのエントリ リンクを一覧表示するには、projects.locations:lookupEntryLinks メソッドを呼び出します。たとえば、dbt モデルがマテリアライズする BigQuery テーブルを取得するには:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:lookupEntryLinks?entry=ENTRY_NAME&entryMode=SOURCE&entryLinkTypes=projects/dataplex-types/locations/global/entryLinkTypes/reference"

ENTRY_NAME は、dbt エントリの完全なリソース名です。結果はページ分けされ、1 ページあたり最大 10 個のリンクが表示されます。

リソースの検索の詳細については、Knowledge Catalog でリソースを検索するをご覧ください。クエリ式とフィルタの詳細については、Knowledge Catalog の検索構文をご覧ください。

次のステップ