[アップデート] AWS Glue Data Catalog がビジネスコンテキストとセマンティック検索をサポートしたので試してみました(プレビュー)

[アップデート] AWS Glue Data Catalog がビジネスコンテキストとセマンティック検索をサポートしたので試してみました(プレビュー)

AWS Glue Data Catalog に新しく追加されたセマンティック検索機能を試してみました。テーブルにビジネスコンテキストを付与して「意味」でデータを探せるようになったこの機能、実際の設定手順と検索精度について詳しく解説します。
2026.06.22

クラウド事業本部の石川です。AWS Glue Data Catalog で、テーブルに用語集(ビジネスコンテキスト)を付与して「意味」でデータを探せるセマンティック検索がプレビュー提供されましたので、実際に試してみました。

https://aws.amazon.com/about-aws/whats-new/2026/06/aws-glue-data-catalog/

これまで Data Catalog のテーブル検索は、テーブル名やカラム名といった技術的なメタデータが中心でした。今回のアップデートでは、テーブルに対して用語集(glossary)の用語や説明・カスタムメタデータといった「業務上の意味」を付与し、新しい Glue Search API(search-assets)を使って意味ベースでデータを発見できるようになります。AWS はこの背景として、AI エージェントが信頼できる定義に基づいて推論できるよう、データに業務コンテキストを与えることを挙げています。

プレビュー提供リージョンは、米国東部(バージニア北部)、米国東部(オハイオ)、米国西部(オレゴン)、欧州(アイルランド)です。

https://aws.amazon.com/blogs/machine-learning/context-intelligence-for-your-data-and-ai-agents-at-scale/

ビジネスコンテキストとセマンティック検索とは

今回追加された主な要素は次の3つです。

  • 用語集(glossary)と用語(glossary term): 「アクティブユーザー」のような業務概念に標準的な定義を与える入れ物と、その個々の定義です。
  • アセットへの関連付け: 用語をテーブルなどのアセットに紐付けることで、テーブルが「何を表すデータか」をカタログ上で表現できます。
  • セマンティック検索(search-assets): テーブル名そのものではなく、付与したビジネスコンテキストや説明文の「意味」からデータを検索する API です。

加えて、カスタムメタデータ(form type)やスキルアセットを使って、データの利用ルールや結合パスといった追加の文脈を持たせることもできます。これらは AI エージェント(MCP 対応エージェントや AWS Agent Toolkit)からの利用も想定されていますが、本記事ではコアとなる「用語集 → 関連付け → セマンティック検索」を検証します。

やってみた

前提条件

  • Data Catalog にテーブルが1つ以上登録されていること(本記事では検証用テーブルを新規作成します)
  • glue:CreateGlossaryglue:CreateGlossaryTermglue:AssociateGlossaryTermsglue:Searchglue:GetAsset などの権限を持つ IAM ロールまたはユーザー
  • 検証環境:
    • リージョン: us-east-1(バージニア北部)
    • AWS CLI: aws-cli/2.35.9

公式ドキュメントには、必要な IAM 権限のポリシー例が掲載されています。公式マニュアルを見る限り、現在(プレビュー)はマネジメントコンソールからこの機能を利用する方法はないため、awsコマンドを用いて検証します。

https://docs.aws.amazon.com/glue/latest/dg/catalog-business-context-getting-started.html

検証用のデータベースとテーブルを作成する

まず、セマンティック検索の対象となるテーブルを用意します。実データは不要なので、最小スキーマのテーブル定義のみを作成します。

% aws s3 mb s3://cm-datalake-20260622 --region us-east-1
make_bucket: cm-datalake-20260622

% aws glue create-database --region us-east-1 \
  --database-input '{"Name":"blog_demo","Description":"技術検証用"}'

% aws glue create-table --region us-east-1 --database-name blog_demo \
  --table-input '{
    "Name":"sales_transactions",
    "Description":"ユーザーごとの日次売上トランザクション",
    "TableType":"EXTERNAL_TABLE",
    "Parameters":{"classification":"csv","skip.header.line.count":"1"},
    "StorageDescriptor":{
      "Columns":[
        {"Name":"user_id","Type":"string"},
        {"Name":"login_date","Type":"date"},
        {"Name":"amount","Type":"double"}
      ],
      "Location":"s3://cm-datalake-20260622/sales_transactions/",
      "InputFormat":"org.apache.hadoop.mapred.TextInputFormat",
      "OutputFormat":"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "SerdeInfo":{
        "SerializationLibrary":"org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
        "Parameters":{"field.delim":","}
      }
    }
  }'

テーブルが作成できました。

用語集を作成する

業務定義を格納する用語集を作成します。

% aws glue create-glossary --region us-east-1 \
  --name "enterprise_data_glossary" \
  --description "組織全体のデータ資産に関する標準化されたビジネス定義。"
{
    "Id": "5sbt95rvaddx2f",
    "Name": "enterprise_data_glossary",
    "Description": "組織全体のデータ資産に関する標準化されたビジネス定義。"
}

レスポンスで用語集の Id が返ります。この Id は後続の用語作成で使用します。

用語を作成する

「Active User(アクティブユーザー)」という業務概念を、定義つきで用語として登録します。先ほどの用語集 Id を --glossary-identifier に指定します。

% aws glue create-glossary-term --region us-east-1 \
  --glossary-identifier "5sbt95rvaddx2f" \
  --name "Active User" \
  --short-description "直近30日のログインユーザー。" \
  --long-description "過去30日間に少なくとも1回ログインしたユーザー。"
{
    "Id": "bnm5ugtxv5kzvr",
    "GlossaryId": "5sbt95rvaddx2f",
    "Name": "Active User",
    "ShortDescription": "直近30日のログインユーザー。",
    "LongDescription": "過去30日間に少なくとも1回ログインしたユーザー。"
}

用語の Id が返ります。

用語をテーブルに関連付ける

作成した用語を、対象テーブルに関連付けます。ここで1点ハマりどころがありました。公式ドキュメントのチュートリアルでは --identifier でテーブルの ARN を指定する例が載っていますが、awsコマンドのhelp(aws glue associate-glossary-terms help )を確認したところ、--asset-identifier が正しい引数名でした。

% aws glue associate-glossary-terms --region us-east-1 \
  --asset-identifier "arn:aws:glue:us-east-1:123456789012:table/blog_demo/sales_transactions" \
  --glossary-term-identifiers "bnm5ugtxv5kzvr"
{
    "AssetIdentifier": "arn:aws:glue:us-east-1:123456789012:table/blog_demo/sales_transactions",
    "GlossaryTerms": [
        "bnm5ugtxv5kzvr"
    ]
}

関連付けが成功すると、対象アセットと紐付いた用語の一覧が返ります。

セマンティック検索で探す

いよいよセマンティック検索です。What's New やドキュメントでは「Glue Search API」「aws glue search」と表現されていますが、ダメ元で aws glue search を実行したところ、以下のとおりサブコマンドが存在しませんでした。

aws glue search --region us-east-1 --search-text "active users"

aws: [ERROR]: An error occurred (ParamValidation): argument operation: Found invalid choice 'search'

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

awsコマンドのhelp(aws glue help )を確認したところ、 search-assetsのようです。用語に付けた業務概念に近い「active users」というキーワードで検索してみます。

% aws glue search-assets --region us-east-1 --search-text "active users"
{
    "Items": [
        {
            "Id": "arn:aws:glue:us-east-1:123456789012:table/blog_demo/sales_transactions",
            "AssetName": "sales_transactions",
            "AssetDescription": "ユーザーごとの日次売上トランザクション",
            "UpdatedAt": "2026-06-22T22:26:02.452000+09:00",
            "AssetTypeId": "Table"
        }
    ]
}

用語「active users」を付与したテーブルだけが、ヒットしました。テーブル名は sales_transactions であり、「active users」という文字列はテーブル名にもカラム名にも含まれていません。それでもヒットしたのは、用語集で付与したビジネスコンテキストに基づく検索が効いているためです。

次に日本語の「アクティブユーザー」で検索できるかも確認しましたが、結果は一つもヒットしませんでした。

%  aws glue search-assets --region us-east-1 --search-text "アクティブユーザー"
{
    "Items": []
}

アセットの中身を確認する

検索でヒットしたテーブルが、実際にどのような情報を保持しているか get-asset で確認します。なお get-asset の引数は --identifier で、先ほどの associate-glossary-terms--asset-identifier)とは引数名が揃っていない点に注意が必要でした。

% aws glue get-asset --region us-east-1 \
  --identifier "arn:aws:glue:us-east-1:123456789012:table/blog_demo/sales_transactions"
{
    "Id": "arn:aws:glue:us-east-1:123456789012:table/blog_demo/sales_transactions",
    "Name": "sales_transactions",
    "Description": "ユーザーごとの日次売上トランザクション",
    "CreatedAt": "2026-06-22T22:26:02.452000+09:00",
    "UpdatedAt": "2026-06-22T22:26:02.452000+09:00",
    "AssetTypeId": "amazon.glue::Table",
    "GlossaryTerms": [
        "bnm5ugtxv5kzvr"
    ],
    "Forms": {
        "amazon.glue::GlueTable": {
            "FormTypeId": "GlueTable",
            "Content": "{\"lakeFormationRegistration\":\"NotRegistered\",\"materializedViewStatus\":\"NotMaterializedView\",\"databaseName\":\"blog_demo\",\"serdeLibrary\":\"org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe\",\"multiDialectViewStatus\":\"Disabled\",\"inputFormat\":\"org.apache.hadoop.mapred.TextInputFormat\",\"outputFormat\":\"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat\",\"retention\":0}"
        },
        "amazon::Table": {
            "FormTypeId": "Table",
            "Content": "{\"dataLocation\":\"s3://cm-datalake-20260622/sales_transactions/\",\"dataFormat\":\"csv\",\"type\":\"EXTERNAL_TABLE\"}"
        }
    },
    "Attachments": {},
    "IterableForms": {
        "columns": {
            "FormTypeId": "columns"
        }
    }
}

関連付けた用語の Id(GlossaryTerms)に加え、テーブルの形式やカラム情報が Form として保持されていることが分かります。

構造(アセットタイプ)で絞り込む

セマンティック検索は、ビジネスコンテキストだけでなく構造的な属性でも絞り込めます。--filter-clause でアセットタイプが Table のものだけに限定してみます。

% aws glue search-assets --region us-east-1 \
  --search-text "active users" \
  --filter-clause '{"AttributeFilter":{"Attribute":"type","Operator":"equals","Value":{"StringValue":"Table"}}}' \
  --max-items 10

{
    "Items": [
        {
            "Id": "arn:aws:glue:us-east-1:123456789012:table/blog_demo/sales_transactions",
            "AssetName": "sales_transactions",
            "AssetDescription": "ユーザーごとの日次売上トランザクション",
            "UpdatedAt": "2026-06-22T22:26:02.452000+09:00",
            "AssetTypeId": "Table"
        }
    ]
}

意図どおり、Table タイプの対象テーブルが返りました。

考察

実際に検証して得られた知見を整理します。

  • 用語集の用語に近いキーワード(「active users」)では、テーブル名に該当文字列が一切なくても、用語を付与したテーブルをピンポイントで発見できました。ビジネスコンテキストによる検索が機能していることを確認できました。
  • 一方で、同じ意味でも言い換えたクエリ(「people who signed in recently」)で検索したところ、今回付与したテーブルは検索結果に浮上せず、無関係なテーブルが返りました。期待した結果とは異なりましたが、これは付与したコンテキスト(用語名・説明文)が検索クエリとどれだけ意味的に近いかに精度が左右されるためと考えられます。発見されやすくするには、想定される検索語に寄せた用語名・説明を充実させることが重要だと感じました。
  • 既存テーブルが多数あるカタログでは、関連性の弱いキーワードで検索すると幅広いテーブルが結果に含まれました。検索結果はあくまでランク付けされた候補であり、付与するビジネスコンテキストの質が「探しやすさ」に直結します。
  • 用語の付与(associate-glossary-terms)直後に検索しても、体感できる反映ラグはなく即座にヒットしました。プレビューということでインデックス反映に時間がかかる可能性も想定していましたが、今回の小規模な検証では問題ありませんでした。
  • ハマりどころとして、ドキュメントの aws glue search は CLI 上は search-assets であること、関連付けの引数がドキュメントの --identifier ではなく --asset-identifier であること、associate-glossary-terms--asset-identifier)と get-asset--identifier)で引数名が揃っていないことがありました。プレビュー段階のため、今後ドキュメントと CLI の表記は整理されていくと思われます。

今後試してみたい点として、以下が挙げられます。

  • カスタムメタデータ(form type)による属性の標準化と、属性での絞り込み検索
  • スキルアセットを用いた、AI エージェント向けのデータ利用ルールの付与
  • MCP 対応エージェント(aws-data-analytics プラグイン)からのカタログ検索連携

最後に

AWS Glue Data Catalog のビジネスコンテキストとセマンティック検索(プレビュー)を、用語集の作成からテーブルへの関連付け、セマンティック検索による発見まで一通り試してみました。

テーブル名やカラム名に頼らず、業務上の意味からデータを発見できるのは、データ利用者にとってもデータを参照する AI エージェントにとっても大きな前進です。一方で、検索精度は付与するビジネスコンテキストの質に左右されるため、用語名や説明文の整備をセットで考える必要があると感じました。

操作はすべて Glue Data Catalog のメタデータに対するもので、追加のインフラは不要です。検証で作成したリソース(用語の関連付け・用語・用語集・テーブル・データベース)は、依存関係の逆順で削除すれば検索結果からも消去されることを確認しました。プレビューを試す際は、対応リージョンで小さく検証し、終わったら忘れずにクリーンアップすることをおすすめします。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事