2026.02.05 コラム
【テックコラム】Dataplex のメタデータ エクスポート機能を試してみた
DataCurrent の金子です。Dataplex の メタデータ エクスポート 機能を試しました。
メタデータ エクスポートを使うと、Dataplex Universal Catalog に登録されているメタデータを Cloud Storage に出力できます。出力されたデータは BigQuery の外部テーブルとして分析したり、他のシステムと連携したりするのに活用できます。
※ この記事は、2026年1月時点の Google Cloud の公式ドキュメント Export metadata を参考にしています。内容は公開時点のものであり、最新情報は公式ドキュメントをご確認ください。
Dataplex のメタデータ エクスポートとは
Dataplex で管理しているテクニカルメタデータやビジネスメタデータを、指定した Cloud Storage バケットに JSONL 形式でエクスポートする機能です。
単なるバックアップとしてだけでなく、組織全体のデータ資産リストを BigQuery で集計・可視化する際に非常に有効です。
エクスポートを試してみた
特定のプロジェクトを対象にメタデータ エクスポート ジョブを実行しました。 実行方法は 公式ドキュメント の通り、API を呼び出すだけです。
まず、以下の request.json を作成しました。
{
"type": "EXPORT",
"export_spec": {
"output_path": "gs://<BUCKET>/",
"scope": {
"projects": [
"projects/<PROJECT_ID>"
]
}
}
}
続いて、以下のコマンドを実行しました。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://dataplex.googleapis.com/v1/projects/<PROJECT_ID>/locations/asia-northeast1/metadataJobs?metadataJobId=test-kaneko-job-20260121"
約20分でジョブが完了しました。
1. エクスポート結果のディレクトリー構造
Cloud Storage に以下のような階層でファイルが出力されました。
gs://<BUCKET>/
└── year=2026/
└── month=01/
└── day=21/
└── consumer_project=<PROJECT_ID>/
└── job=test-kaneko-job-20260121/
└── project=<PROJECT_ID>/
├── entry_group=@analyticshub/
│ └── 1.jsonl
├── entry_group=@bigquery/
│ ├── 1.jsonl
│ └── 2.jsonl
├── entry_group=@storage/
│ └── 1.jsonl
└── ...
ここからわかる特徴として、ディレクトリー構造がHive パーティション形式になっている点が挙げられます。これにより、BigQuery から読み込む際にパーティションとして認識可能です。
また、@bigquery や @storage といった entry_group ごとにディレクトリーが分かれているため、例えば「BigQuery のメタデータだけ解析したい」といった場合に、読み込むファイルを物理的に絞り込めます。
2. データの中身を見てみる
実際に出力された JSONL ファイルの中身を確認してみます。 今回は BigQuery テーブルのメタデータを例に説明します。
BigQuery テーブル
entry_group=@bigquery の配下のデータを見ると、aspects フィールドに詳細な情報が含まれています。 これは、BigQuery テーブルなどのシステムエントリーには、エントリータイプによって「必須アスペクト」が定義されており、Dataplex がスキーマ情報などを自動的に管理しているためです。
なお、以下の例では、検証用に test-kaneko-data-governance というカスタムアスペクトを付与しており、データガバナー、ビジネスオーナー、データ分類などの情報が含まれています。
{
"entry": {
"name": "projects/<PROJECT_NUMBER>/locations/asia-northeast1/entryGroups/@bigquery/entries/bigquery.googleapis.com/projects/<PROJECT_ID>/datasets/test_kaneko/tables/customerdata",
"entryType": "projects/<PROJECT_NUMBER>/locations/global/entryTypes/bigquery-table",
"createTime": "2025-03-25T07:26:36.584057Z",
"updateTime": "2026-01-21T08:22:38.099295Z",
"aspects": {
"<PROJECT_NUMBER>.asia-northeast1.test-kaneko-data-governance": {
"aspectType": "projects/<PROJECT_NUMBER>/locations/asia-northeast1/aspectTypes/test-kaneko-data-governance",
"createTime": "2026-01-21T07:38:57.724020Z",
"updateTime": "2026-01-21T07:38:57.724020Z",
"data": {
"data-governor": "<p>金子泰三(データガバナー)</p>",
"business-owner": "<p>金子泰三(ビジネスオーナー)</p>",
...
},
"aspectSource": {}
},
"<PROJECT_NUMBER>.global.bigquery-policy": {
"aspectType": "projects/<PROJECT_NUMBER>/locations/global/aspectTypes/bigquery-policy",
"createTime": "2025-06-25T23:13:24.576782Z",
"updateTime": "2026-01-21T08:22:38.099295Z",
"data": {
"numRowAccessPolicies": 0.0,
"numColumnDataPolicies": 0.0,
...
},
"aspectSource": {
"createTime": "2025-03-25T07:26:36.138Z",
"updateTime": "2026-01-21T08:22:37.676Z",
"dataVersion": "Ingestion/1.0.0"
}
},
"<PROJECT_NUMBER>.global.bigquery-table": {
"aspectType": "projects/<PROJECT_NUMBER>/locations/global/aspectTypes/bigquery-table",
"createTime": "2025-03-25T07:26:36.584057Z",
"updateTime": "2026-01-21T08:22:38.099295Z",
"data": {
"type": "TABLE",
"tableType": "TABLE"
},
"aspectSource": {
"createTime": "2025-03-25T07:26:36.138Z",
"updateTime": "2026-01-21T08:22:37.676Z",
"dataVersion": "Ingestion/1.0.0"
}
},
"<PROJECT_NUMBER>.global.schema": {
"aspectType": "projects/<PROJECT_NUMBER>/locations/global/aspectTypes/schema",
"createTime": "2025-03-25T07:26:36.584057Z",
"updateTime": "2026-01-21T08:22:38.099295Z",
"data": {
"fields": [
{
"name": "custid",
"description": "The unique identifier for the customer.",
...
},
{
"name": "custname",
"description": "The customer's name.",
...
},
...
]
},
"aspectSource": {
"createTime": "2025-03-25T07:26:36.138Z",
"updateTime": "2026-01-21T08:22:37.676Z",
"dataVersion": "Ingestion/1.0.0"
}
},
"<PROJECT_NUMBER>.global.storage": {
"aspectType": "projects/<PROJECT_NUMBER>/locations/global/aspectTypes/storage",
"createTime": "2025-03-25T07:26:36.584057Z",
"updateTime": "2026-01-21T08:22:38.099295Z",
"data": {
"service": "BIGQUERY",
"resourceName": "//bigquery.googleapis.com/projects/<PROJECT_ID>/datasets/test_kaneko/tables/customerdata"
},
"aspectSource": {
"createTime": "2025-03-25T07:26:36.138Z",
"updateTime": "2026-01-21T08:22:37.676Z",
"dataVersion": "Ingestion/1.0.0"
}
},
"<PROJECT_NUMBER>.global.usage": {
"aspectType": "projects/<PROJECT_NUMBER>/locations/global/aspectTypes/usage",
"createTime": "2025-12-12T08:41:59.056811Z",
"updateTime": "2026-01-21T08:22:27.419798Z",
"data": {
"metrics": [
{
"name": "total_queries",
...
},
...
],
...
},
"aspectSource": {
"createTime": "2025-03-25T07:26:36.138Z",
"updateTime": "2026-01-21T08:22:25.039Z"
}
}
},
"parentEntry": "projects/<PROJECT_NUMBER>/locations/asia-northeast1/entryGroups/@bigquery/entries/bigquery.googleapis.com/projects/<PROJECT_ID>/datasets/test_kaneko",
"fullyQualifiedName": "bigquery:<PROJECT_ID>.test_kaneko.customerdata",
"entrySource": {
"resource": "projects/<PROJECT_ID>/datasets/test_kaneko/tables/customerdata",
"system": "BIGQUERY",
"platform": "GCP",
"displayName": "customerdata",
"description": "This table stores comprehensive details about customers. It includes information that can be used to identify and categorize customers. The data allows for analysis of customer demographics and characteristics. This enables targeted marketing and personalized customer experiences.",
"labels": {
"dataplex-data-documentation-published-location": "asia-northeast1",
"dataplex-dp-published-scan": "crs-693a5002-0000-2149-bb57-c82add76d048",
...
},
"ancestors": [
{
"name": "projects/<PROJECT_ID>/datasets/test_kaneko",
"type": "dataplex-types.global.bigquery-dataset"
}
],
"createTime": "2025-03-25T07:26:36.138Z",
"updateTime": "2026-01-21T08:22:37.676Z",
"location": "asia-northeast1"
}
}
}
BigQuery の場合、テーブルのスキーマ情報が entry.aspects 内の <PROJECT_NUMBER>.global.schema アスペクトとして詳細に出力されています。これにより、メタデータ エクスポート結果だけでテーブル定義を把握できます。
注意点として、aspects は Map 形式であり、キーにプロバイダーのプロジェクト番号などが含まれるため、クエリーで抽出する際は工夫が必要です。
必須アスペクトの種類
BigQuery テーブルには、以下のような 必須アスペクト が自動的に含まれていました。
- <PROJECT_NUMBER>.global.bigquery-policy: テーブルに適用されているポリシーの数を含みます。行レベルアクセスポリシー (
numRowAccessPolicies)、列レベルデータポリシー (numColumnDataPolicies)、タグの数 (numTags) などが記録されています。
- <PROJECT_NUMBER>.global.bigquery-table: テーブルの基本情報を含みます。テーブルタイプ (
type)、テーブルの種類 (tableType) が記録されています。
- <PROJECT_NUMBER>.global.schema: テーブルのスキーマ定義を含みます。各カラムの名前 (
name)、説明 (description)、データ型 (dataType)、メタデータ型 (metadataType)、モード (mode) が含まれています。
- <PROJECT_NUMBER>.global.storage: テーブルが格納されているストレージサービスの情報を含みます。サービス名 (
service)、リソース名 (resourceName) が記録されています。
- <PROJECT_NUMBER>.global.usage: テーブルの利用状況を含みます。クエリー実行回数 (
total_queries)、実行時間 (execution_time) が含まれています。
BigQuery で分析する
外部テーブルの作成方法 に記載されている通り、コンソールから外部テーブルを作成しました。
参考までに、作成時の DDL を以下に示します。
CREATE EXTERNAL TABLE `<PROJECT_ID>.<DATASET>.export_metadata`(
entry
STRUCT<
name STRING,
entryType STRING,
createTime STRING,
updateTime STRING,
aspects JSON,
parentEntry STRING,
fullyQualifiedName STRING,
entrySource
STRUCT<
resource STRING,
system STRING,
platform STRING,
displayName STRING,
description STRING,
labels JSON,
ancestors ARRAY<STRUCT<name STRING, type STRING>>,
createTime STRING,
updateTime STRING,
location STRING>>,
year INT64,
month INT64,
day INT64,
consumer_project STRING,
job STRING,
project STRING,
entry_group STRING)
WITH
PARTITION
COLUMNS
OPTIONS (
format = "NEWLINE_DELIMITED_JSON",
hive_partition_uri_prefix = "gs://<BUCKET>/",
uris = ["gs://<BUCKET>/year=2026/*"]);
これで、BigQuery 上でメタデータを分析できるようになりました。 例えば、以下のクエリーを実行すると、指定したジョブでエクスポートされたエントリー名と表示名の一覧を取得できます。
SELECT entry.name, entry.entrySource.displayName FROM `<DATASET>.export_metadata` WHERE year = 2026 AND month = 1 AND day = 21 AND consumer_project = <PROJECT_ID> AND job = 'test-kaneko-job-20260121' AND project = <PROJECT_ID> AND entry_group = '@bigquery'
まとめ
今回は、Dataplex のメタデータ エクスポート機能を試しました。 実際にデータを見てみると、ディレクトリー構造が分析しやすく設計されている点や、エントリータイプによって情報の詳細度が異なる点がよくわかりました。
最後に
自社に専門人材がいない、リソースが足りない等の課題をお持ちの方に、エンジニア領域の支援サービス(Data Engineer Hub)をご提供しています。 お困りごとがございましたら是非お気軽にご相談ください。
本件に関するお問い合わせは下記にて承ります。
株式会社DataCurrent
info@datacurrent.co.jp