【Vertex AI】BigQueryの非構造化データ&メタデータをVertex AI Searchで検索する

【Vertex AI】BigQueryの非構造化データ&メタデータをVertex AI Searchで検索する

2025.10.08

データ事業本部の川中子(かわなご)です。

以前、ObjectRef型を持つBigQueryテーブルをデータストアとして設定した
Vertex AI Searchの検索アプリケーションの検証を行いました。
しかし結果として、データの中身まで見に行くような検索はできていませんでした。

今回はその課題に再チャレンジして、改めて非構造化のデータ検索をやってみました。

前回のブログはこちらをご覧ください。
https://dev.classmethod.jp/articles/bigquery-vertex-ai-search-objectref/

検証準備

テーブルスキーマの作成

まず、データストアとなる非構造データの情報を持つテーブルを作成します。
スキーマは公式ドキュメントに記載されている通りにしました。

			
			CREATE TABLE `cm_kawanago_useast1.tbl_custom_search` (
  id STRING NOT NULL,
  jsonData STRING,
  content STRUCT
    <
    mimeType STRING,
    uri STRING
    >
);

		

https://cloud.google.com/generative-ai-app-builder/docs/prepare-data?hl=ja#unstructured

サンプルデータの投入

次に検証用のデータを投入します。

ここで投入しているデータは前回の検証時とほぼ同じ内容で、
工場の生産情報と健康エッセイのPDFファイルを紐づけているようなデータです。

			
			INSERT INTO `cm_kawanago_useast1.tbl_custom_search` (id, jsonData, content)
VALUES
(
  'FAC001_20241201_001',
  '{"factory_code":"TOK001","prefecture":"東京都","data_type":"CSV","generated_datetime":"2024-12-01 08:15:30","production_line":"LINE_A","equipment_id":"HEALTH_001","process_stage":"ASSEMBLY"}',
  STRUCT(
    'application/pdf' AS mimeType,
    'gs://cm-kawanago-unstructured-data-useast1/balanced_diet_healthy_future.pdf' AS uri
  )
),
(
  'FAC002_20241201_002',
  '{"factory_code":"OSA001","prefecture":"大阪府","data_type":"JSON","generated_datetime":"2024-12-01 09:22:15","production_line":"LINE_B","equipment_id":"FOOD_02","process_stage":"INSPECTION"}',
  STRUCT(
    'application/pdf' AS mimeType,
    'gs://cm-kawanago-unstructured-data-useast1/exercise_habits_mind_body_transformation.pdf' AS uri
  )
),
(
  'FAC003_20241201_003',
  '{"factory_code":"NGY001","prefecture":"愛知県","data_type":"LOG","generated_datetime":"2024-12-01 10:45:00","production_line":"LINE_C","equipment_id":"CHICKEN_03","process_stage":"PREP"}',
  STRUCT(
    'application/pdf' AS mimeType,
    'gs://cm-kawanago-unstructured-data-useast1/quality_sleep_changes_life.pdf' AS uri
  )
);

		

これでデータストアになるテーブルの準備が完了しました。

			
			bq query --use_legacy_sql=false "SELECT * FROM cm_kawanago_useast1.tbl_custom_search order by id"

		
id jsonData content
FAC001_20241201_001 {"factory_code":"TOK001","prefecture":"東京都","data_type":"CSV","generated_datetime":"2024-12-01 08:15:30","production_line":"LINE_A","equipment_id":"HEALTH_001","process_stage":"ASSEMBLY"} {"mimeType":"application/pdf","uri":"gs://cm-kawanago-unstructured-data-useast1/balanced_diet_healthy_future.pdf"}
FAC002_20241201_002 {"factory_code":"OSA001","prefecture":"大阪府","data_type":"JSON","generated_datetime":"2024-12-01 09:22:15","production_line":"LINE_B","equipment_id":"FOOD_02","process_stage":"INSPECTION"} {"mimeType":"application/pdf","uri":"gs://cm-kawanago-unstructured-data-useast1/exercise_habits_mind_body_transformation.pdf"}
FAC003_20241201_003 {"factory_code":"NGY001","prefecture":"愛知県","data_type":"LOG","generated_datetime":"2024-12-01 10:45:00","production_line":"LINE_C","equipment_id":"CHICKEN_03","process_stage":"PREP"} {"mimeType":"application/pdf","uri":"gs://cm-kawanago-unstructured-data-useast1/quality_sleep_changes_life.pdf"}

データストアの作成

AI Applicationsのコンソールからデータストアを作成していきます。
実際の手順は、冒頭で紹介した以前のブログを参照いただければと思います。

データソースにBigQueryを選択するところまでは同じですが、
今回はインポート方法にUnstructured - BigQuery table with metadataを選択します。

1759881266088

あとは、事前に作成したテーブルを指定してデータストアを作成すればOKです。
前回と異なるのは インポート方法とテーブルの形式のみ です。

検証

複数キーワードでの検索

まず前回検証時と同じ、複数のキーワードで検索してみました。

しかし一切検索に引っかからず、少し不安になりましたが、
どうやらこの組み合わせだと検索に引っかからなかっただけのようでした。

1759882295971

単一キーワードでの検索

すこし検索をシンプルにするために、単一のキーワードで検索してみると、
PDFファイルの中身も含めて検索されていることが確認できました。

1759882456327

メタデータでの検索

jsonDataに格納しているメタデータでも検索が効いているか確認してみます。

1759882556723

メタデータでもしっかり検索が有効になっているようです。
返答は空になっていましたが、このあたりは構成設定によっても異なるかも知れません。

複数キーワードでの検索(再検証)

組み合わせによっては、複数ワードの検索も有効であることが確認できました。
メタデータでもファイルの中身でも検索できるので、直感的に活用できそうです。

1759882677113

オブジェクトテーブルを活用したメタデータ登録

上記の検証ではjsonDatacontentなどのオブジェクトメタデータを、
直接BigQueryのテーブルに対してINSERTしていました。

しかし実際の運用では、Cloud Storageのオブジェクトメタデータと、
オブジェクトに紐づくオブジェクトテーブルを活用することでより現実的な実装が可能です。

コンソールからのメタデータ登録

Cloud Storageのコンソール画面から対象のオブジェクトを選択し、
メニューからメタデータを編集を選択します。

1759896564133

カスタムメタデータに任意のキーと値を登録することで、
即時オブジェクトテーブルにもメタデータが反映されます。

1759896625897

オブジェクトテーブルにメタデータが反映されていることが確認できました。

			
			bq query --use_legacy_sql=false "SELECT * FROM cm_kawanago_useast1.tbl_custom_search_obj"

		
uri generation content_type size md5_hash updated metadata ref
gs://cm-kawanago-unstructured-data-useast1/balanced_diet_healthy_future.pdf 1756169799115693 application/pdf 104626 d1c6e12ff3c2f5422d10d3276369442b 2025-10-08 00:56:25 [{"name":"equipment_id","value":"HEALTH_001"},{"name":"factory_code","value":"TOK001"},{"name":"generated_datetime","value":"2024-12-01 08:15:30"},{"name":"prefecture","value":"東京都"},{"name":"process_stage","value":"ASSEMBLY"},{"name":"production_line","value":"LINE_A"},{"name":"data_type","value":"CSV"}] {"uri":"gs://cm-kawanago-unstructured-data-useast1/balanced_diet_healthy_future.pdf","version":"1756169799115693","authorizer":"cm-da-bs-yamahamotor.us-east1.object-tables-connection-useast1","details":"{\"gcs_metadata\":{\"content_type\":\"application/pdf\",\"md5_hash\":\"d1c6e12ff3c2f5422d10d3276369442b\",\"size\":104626,\"updated\":1759884985351000}}"}
gs://cm-kawanago-unstructured-data-useast1/exercise_habits_mind_body_transformation.pdf 1756169799114594 application/pdf 104030 f0b1761dd12ba5c948966e25a8020d68 2025-10-08 00:59:06 [{"name":"factory_code","value":"OSA001"},{"name":"equipment_id","value":"FOOD_02"},{"name":"generated_datetime","value":"2024-12-01 09:22:15"},{"name":"process_stage","value":"INSPECTION"},{"name":"data_type","value":"JSON"},{"name":"prefecture","value":"大阪府"},{"name":"production_line","value":"LINE_B"}] {"uri":"gs://cm-kawanago-unstructured-data-useast1/exercise_habits_mind_body_transformation.pdf","version":"1756169799114594","authorizer":"cm-da-bs-yamahamotor.us-east1.object-tables-connection-useast1","details":"{\"gcs_metadata\":{\"content_type\":\"application/pdf\",\"md5_hash\":\"f0b1761dd12ba5c948966e25a8020d68\",\"size\":104030,\"updated\":1759885146561000}}"}
gs://cm-kawanago-unstructured-data-useast1/quality_sleep_changes_life.pdf 1759884398993368 application/pdf 106389 8ef7f84d67246d8e72f6c1add8e09550 2025-10-08 01:00:15 [{"name":"production_line","value":"LINE_C"},{"name":"generated_datetime","value":"2024-12-01 10:45:00"},{"name":"process_stage","value":"PREP"},{"name":"data_type","value":"LOG"},{"name":"prefecture","value":"愛知県"},{"name":"equipment_id","value":"CHICKEN_03"},{"name":"factory_code","value":"NGY001"}] {"uri":"gs://cm-kawanago-unstructured-data-useast1/quality_sleep_changes_life.pdf","version":"1759884398993368","authorizer":"cm-da-bs-yamahamotor.us-east1.object-tables-connection-useast1","details":"{\"gcs_metadata\":{\"content_type\":\"application/pdf\",\"md5_hash\":\"8ef7f84d67246d8e72f6c1add8e09550\",\"size\":106389,\"updated\":1759885215447000}}"}

CLIコマンドからのメタデータ登録

CLIを利用する場合は、以下の形式でアップロード時にメタデータを登録できます。

			
			gcloud storage cp {コピー元ファイル} {コピー先GSパス} --custom-metadata={key1}={val1},{key2}={val2}

		

上記のようなメタデータの登録時に再帰的な方法で登録をしてしまうと、
処理された オブジェクト全てに同じメタデータが付与される ので注意してください。

詳細は公式ドキュメントをご参照ください。
https://cloud.google.com/sdk/gcloud/reference/storage/cp

構成案

実際の運用を考えると、以下のような構成が現実案になりそうです。

1759888702114

  • ファイルのアップロード時にメタデータを登録
  • 登録されたメタデータがオブジェクトテーブルに反映される
  • uricontent_typemetadata列のデータをデータストア用のテーブルに連携する
  • データストア用のテーブルをVertex AI Searchの検索アプリケーションから参照する

オブジェクトテーブルからデータストア用テーブルへのデータ連携だけ実装が必要ですが、
メタデータの登録さえ徹底されていれば、十分実用的な検索システムになりそうです。

さいごに

今回はVertex AI Searchにて非構造化データと任意のメタデータで検索を行う場合に、
データストアとしてBigQueryテーブルを利用する方法を検証しました。

オブジェクトテーブルと連携すれば、必要な情報が簡単に揃いますし、
メタデータは コンソールからの編集や、CLIコマンドにて簡単に登録 ができます。

BigQueryを中心に非構造データの検索機能を実現 することができるので、
学習コストも低く、直感的で非常に使いやすいサービスだと思いました。

少しでも参考になれば幸いです。
最後まで記事を閲覧頂きありがとうございました。

この記事をシェアする

FacebookHatena blogX

関連記事

【Vertex AI】BigQueryの非構造化データ&メタデータをVertex AI Searchで検索する | DevelopersIO