View a markdown version of this page

メタデータを S3 Tables にエクスポートする (プレビュー) - AWS Glue

メタデータを S3 Tables にエクスポートする (プレビュー)

注記

カタログメタデータのエクスポートは、プレビュー機能として提供されています。本機能は、一般提供前に変更される場合があります。

概要

AWS Glue Data Catalog メタデータは、Amazon S3 Tables に保存されているマネージドカタログシステムテーブルにエクスポートできます。S3 Tables のエクスポートを有効にすると、技術メタデータとビジネスメタデータが AWS マネージド aws-catalog テーブルバケットの読み取り専用 Apache Iceberg テーブルに保存されて、Amazon Redshift や Amazon EMR といった AWS 分析サービスで、SQL を使用してクエリできるようになります。

aws-catalog テーブルバケット内では、システムテーブルは次の名前空間の中に保存されます。

  • glue – tables と table_columns を含む。

  • catalog_metadata — glossaries、glossary_terms、associated_glossary_terms、attachments、item_attachments を含む。

現在、次のシステムテーブルがサポートされています。

システムテーブル Contains

tables

データカタログ内の各テーブルの技術メタデータとビジネスメタデータ (名前、データベース、内容、格納場所、形式など)。

table_columns

各カタログテーブルの列 (列の名前、データ型、内容、パーティションキーかどうかなど)。

glossaries

カタログ内のビジネス用語集 (用語集の名前、内容、ステータス)。

glossary_terms

用語集で定義されている用語 (用語の名前、内容、親用語集、ステータスなど)。

associated_glossary_terms

用語集用語とアセットの関連付け (アセット識別子と用語集用語識別子を含む)。

attachments

アセットレベルでアタッチされたカスタムフォームメタデータ (フォームタイプ、添付ファイルの内容など)。

item_attachments

個々の列などアセット内の項目にアタッチされたカスタムフォームメタデータ (反復可能なフォーム名、項目名、フォームタイプ、添付コンテンツなど)。

各テーブルの完全な列レベルのスキーマについては「カタログシステムテーブルのリファレンス」を参照してください。

カタログメタデータのエクスポートの仕組み

エクスポートを有効にすると、データカタログは既存のカタログメタデータのバックフィルを 1 回だけ実行します。その後、システムテーブルは変更を加えるたびに最新状態に保たれます。新たに書き込まれたり更新されたりしたメタデータは、通常 5 分程度でシステムテーブルに反映されます。

システムテーブルは、aws-catalog テーブルバケット内の glue と catalog_metadata の名前空間に保存されます。特定のシステムテーブルは、その種のメタデータがお使いのカタログに初めて保存されたときに表示されます。例えば、エクスポートを有効にし、お使いのカタログに含まれているのがテーブルとデータベースのみだった場合、そのテーブルに関連するシステムテーブルのみが表示されます。用語集のシステムテーブルは、最初の用語集を作成した後に表示されます。

AWS CLI を使用してカタログメタデータのエクスポートを有効にする

カタログメタデータのエクスポートは、アカウントレベルの設定となります。AWS CLI を使って有効または無効にできます。

前提条件

使用する IAM ID には、エクスポート設定のオペレーションである glue:PutDataCatalogExportConfiguration、glue:GetDataCatalogExportConfiguration、ならびに s3tables:CreateTable を呼び出すアクセス許可が必要になります。S3 Tables のアクセス許可の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「Amazon S3 テーブルの作成」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:PutDataCatalogExportConfiguration", "glue:GetDataCatalogExportConfiguration" ], "Resource": "*" } ] }

データカタログメタデータを含む S3 Tables 内のすべてのデータは、デフォルトで SSE-S3 暗号化により暗号化されます。カタログエクスポートを AWS KMS キー (SSE-KMS) を使って暗号化することを選択できます。AWS KMS キーで暗号化する場合は、次の手順を実行して追加のアクセス許可を取得する必要があります。

  1. データカタログエクスポートサービスプリンシパルと S3 Tables メンテナンスサービスプリンシパルに、KMS キー (キーポリシー) を使用するアクセス許可を付与します。

  2. エクスポートを実行する IAM プリンシパルに、KMS キー (ID ポリシー) を使用するためのアクセス許可を付与します。

データカタログエクスポートサービスプリンシパルと S3 Tables メンテナンスサービスプリンシパルに KMS キー (キーポリシー) を使用するアクセス許可を付与

AWS Glue に、暗号化されたカタログメタデータのエクスポートを許可し、エクスポートされたテーブルで、圧縮や、参照されていないファイルの削除といった自動テーブルメンテナンスを許可するときは、次のサービスプリンシパルに KMS キーへのアクセスを許可する必要があります。

  • systemtables.catalog.amazonaws.com — 暗号化されたカタログメタデータを S3 Tables にエクスポートします。

  • maintenance.s3tables.amazonaws.com — エクスポートされたテーブルで自動テーブルメンテナンスを実行します。

AWS Glue は、aws-catalog という名前の AWS マネージドテーブルバケットに書き込みします。S3 Tables エクスポートの暗号化に使用する KMS キーは、保管中のデータカタログの暗号化に使用するものと同じである必要はありません。AWS Glue は対称の KMS キーのみをサポートしています。これらのサービスプリンシパルにアクセス権を付与するときは、次のキーポリシーの例を使用できます。このポリシーでは、maintenance.s3tables.amazonaws.com サービスプリンシパルに対して、aws-catalog テーブルバケット内のテーブルを暗号化および復号するための、特定の KMS キーを使用するアクセス許可が付与されます。S3 Tables メンテナンスサービスプリンシパルの詳細については「Amazon Simple Storage Service ユーザーガイド」の「S3 Tables の SSE-KMS 暗号化のアクセス許可要件」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSystemTablesDescribeKey", "Effect": "Allow", "Principal": { "Service": "systemtables.catalog.amazonaws.com" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }, { "Sid": "AllowSystemTablesEncryptDecrypt", "Effect": "Allow", "Principal": { "Service": "systemtables.catalog.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3tables:us-east-1:123456789012:bucket/aws-catalog/table/*", "kms:ViaService": "s3.us-east-1.amazonaws.com" } } }, { "Sid": "AllowS3TablesMaintenanceEncryptDecrypt", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3tables:us-east-1:123456789012:bucket/aws-catalog/*" } } } ] }

エクスポートを行うプリンシパルに必要な IAM アクセス許可

エクスポートを実行するプリンシパルに次のアクセス許可を付与します。次のポリシーは、glue_catalog_id 暗号化コンテキスト (値はユーザーの catalogId) により範囲指定された特定の AWS Glue Data Catalog を復号するためのアクセス権を IAM プリンシパルに付与します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDescribeKey", "Effect": "Allow", "Action": [ "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }, { "Sid": "AllowExportOfGlueDataCatalogByCatalogId", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012", "kms:EncryptionContext:glue_catalog_id": "123456789012" } } } ] }

カタログメタデータのエクスポートを有効にするには

  1. 次のコマンドを実行してエクスポートを有効にします。

    aws glue put-data-catalog-export-configuration \ --export-setting ENABLED
  2. 次のコマンドを実行して設定を確定します。

    aws glue get-data-catalog-export-configuration

    レスポンスの例:

    { "ExportSetting": "ENABLED", "Status": "ENABLED", "S3TableBucketArn": "arn:aws:s3tables:us-east-1:111122223333:bucket/aws-catalog" }

    最初のバックフィルが進行すると、Status フィールドが ENABLING から ENABLED に移行します。

カタログメタデータのエクスポートを無効にするには

次のコマンドを実行します。

aws glue put-data-catalog-export-configuration \ --export-setting DISABLED

カタログシステムテーブルのリファレンス

すべてのシステムテーブルは、aws-catalog テーブルバケット内の glue と catalog_metadata の名前空間に保存されます。すべてのテーブルに次のシステム列が含まれています。

列 型 説明

ingestion_time

timestamp

レコードがシステムテーブルに取り込まれた時刻 (UTC)。

schema_version

string

テーブルのスキーマバージョン識別子。

テーブル

カタログテーブルにつき 1 行ずつ含まれます。

列 型 説明

id

string

テーブルの一意の識別子

catalog_id

string

カタログ識別子

catalog_name

string

カタログ名

update_time

timestamp

最終更新時のタイムスタンプ

created_time

timestamp

作成時のタイムスタンプ

created_by_id

string

テーブルを作成したプリンシパルの識別子

created_by_type

string

作成プリンシパルのタイプ

description

string

テーブルの説明

name

string

テーブル名。

namespace

string

テーブルの名前空間

region_name

string

AWS リージョン

tags

map<string, string>

リソースタグ

type

string

アセットタイプ

updated_by_id

string

テーブルを最後に更新したプリンシパルの識別子

updated_by_type

string

更新プリンシパルのタイプ

database_name

string

このテーブルが含まれているデータベース

input_format

string

入力形式のクラス

lake_formation_registration

string

AWS Lake Formation 登録ステータス

output_format

string

出力形式のクラス

owner

string

テーブルの所有者。

retention

int

保持期間

serde_library

string

シリアル化/逆シリアル化ライブラリ

table_data_format

string

データ形式

table_data_location

string

データ場所の URI

table_format

string

テーブル形式 (Iceberg、Hudi など)

table_type

string

テーブルタイプ

table_columns

カタログテーブルの列ごとに 1 行含まれます。

列 型 説明

id

string

assetId#columnName 形式の複合識別子

asset_id

string

親テーブルの識別子

column_name

string

列名。

description

string

列の説明

type

string

列のデータタイプ

is_partition_key

boolean

列がパーティションキーであるかどうかを示す

attachments

アセットレベルのカスタムフォームアタッチメントが含まれます (アセットのアタッチメントごとに 1 行)。

列 型 説明

asset_id

string

親アセットの識別子

attachment_name

string

アタッチメント名

form_type_id

string

コンテンツの登録済みフォームタイプ

content_json

string

JSON エンコードされた文字列としてのアタッチメントコンテンツ

item_attachments

個々の列など反復可能なフォーム内の項目に対するアタッチメントが含まれます。

列 型 説明

asset_id

string

親アセットの識別子

iterable_form_name

string

反復可能なフォームの名前 (列など)。

item_name

string

項目の名前 (列名など)

attachment_name

string

アタッチメント名

form_type_id

string

コンテンツの登録済みフォームタイプ

content_json

string

JSON エンコードされた文字列としてのアタッチメントコンテンツ

用語集

用語集ごとに 1 行含まれます。

列 型 説明

id

string

用語集の一意の識別子

description

string

用語集の説明。

name

string

用語集の名前

status

string

ステータス (ENABLED または DISABLED)

glossary_terms

用語ごとに 1 行含まれます。

列 型 説明

id

string

一意の用語識別子

glossary_id

string

親用語集の識別子。

long_description

string

詳細な用語の説明。

name

string

用語の名前

short_description

string

簡単な用語の説明。

status

string

ステータス (ENABLED または DISABLED)

associated_glossary_terms

用語集用語とアセット間の関連付けごとに 1 行含まれます。

列 型 説明

asset_id

string

用語集の用語に関連付けられているアセットの識別子

glossary_term_id

string

アセットに関連付けられている用語集の用語の識別子。glossary_terms テーブルに結合しています。

カタログシステムのテーブルへのクエリ

S3 Tables にエクスポートされたカタログメタデータを、Amazon EMR などの AWS 分析サービスを使用してクエリするときは、事前に AWS マネージド aws-catalog テーブルバケットで分析統合を有効にし、AWS Lake Formation アクセス許可を設定する必要があります。

前提条件

  • カタログメタデータのエクスポートが有効になっており、ステータスが ENABLED になっている

  • 分析サービスを利用できる

  • エクスポートを有効にしてから 5 分以上が経過し、データが利用可能になっている

インテグレーションの概要

S3 Tables と AWS 分析サービスとの統合の詳細 (前提条件、IAM ロール設定、ステップバイステップの手順ほか) については、「Amazon Simple Storage Service ユーザーガイド」の「Amazon S3 Tables と AWS 分析サービスの統合」を参照してください。

S3 Tables のエクスポートを有効にして分析統合を設定すると、Amazon Redshift、Amazon EMR などの AWS 分析サービスを使用してデータカタログのメタデータをクエリできるようになります。これで、標準 SQL を使用してメタデータの監査と分析を実行できます。

クエリの例

すべてのカタログテーブルをデータベースおよび形式とともに一覧表示する

SELECT id, name, database_name, table_format FROM aws_catalog.glue.tables;
特定のテーブルの説明を含む列を検索する

SELECT column_name, type, description FROM aws_catalog.glue.table_columns WHERE asset_id = 'table-id';
用語集の用語を親用語集に結合する

SELECT g.name AS glossary_name, t.name AS term_name, t.short_description FROM aws_catalog.catalog_metadata.glossary_terms t JOIN aws_catalog.catalog_metadata.glossaries g ON t.glossary_id = g.id WHERE g.status = 'ENABLED';
特定の用語集の用語に関連付けられたテーブルを検索する

SELECT t.name, t.database_name, gt.name AS term_name FROM aws_catalog.glue.tables t JOIN aws_catalog.catalog_metadata.associated_glossary_terms agt ON agt.asset_id = t.id JOIN aws_catalog.catalog_metadata.glossary_terms gt ON gt.id = agt.glossary_term_id WHERE gt.name = 'term-name';
カスタムフォームアタッチメントからフィールドを抽出する

SELECT asset_id, attachment_name, json_extract_scalar(content_json, '$.owner') AS data_owner FROM aws_catalog.catalog_metadata.attachments WHERE form_type_id = 'your-form-type-id';