はじめに
データウェアハウスとして知られる BigQuery は、通常、構造化されたデータを扱うためのツールです。しかし、近年、BigQuery ML (BQML) と Geminiとの連携により、画像や音声、PDFといった非構造化データもSQLベースで簡単に分析できるようになりました。
このブログでは、GCS(Google Cloud Storage)に保存されている画像ファイルをBigQueryに取り込み、SQLのクエリを叩くだけで、画像に何が写っているのかをGeminiに認識(マルチモーダル)させる手順を、具体例とともに解説します。
BigQueryMLでマルチモーダルを行うメリット
BigQueryでマルチモーダルの分析を行うメリットは下記になります。
- 開発と操作の容易さ
複雑なプログラミング言語を使用することなく、SQLベースでLLM(大規模言語モデル)の機能を利用できる点がメリットの一つです。
これにより、BigQueryに格納されたデータを手軽に処理することができます。 - データ統合と管理
構造化データと非構造化データを一つの場所で管理することを可能にします。そのため、画像や音声のデータの飛行増加データとDBに保存してある構造化データを同じ標準テーブル行に保存し、管理することができます
上記のように、別途GeminiのAPIを呼び出すプログラミングをする必要がなく分析ができるため、とても効率的に分析することができます。
全体の流れ
マルチモーダルを行う流れを下記に示します。
- GCSに識別させたい画像を配置
- オブジェクトテーブルを作成
- リモートモデル作成
- BigQueryMLを利用して画像認識
それでは具体的な手順を解説します。
①GCSに識別させたい画像を配置
GCSに猫と犬の画像を配置します。(画像はVertex AIのimagen4 Ultraで作成しました)
GCSにバケットを作成し、上記画像を配置します。
GCSに画像を配置したら次にBigQueryの設定に入ります。
②オブジェクトテーブルを作成
下記オブジェクトテーブルを作成します。
オブジェクトテーブルとは、GCS(Google Cloud Storage)などのオブジェクトストレージに格納されたファイルをBigQueryから参照することができるようにするテーブルです。
BigQuery MLで画像や音声、PDFといった非構造化データに対するマルチモーダルを実行する際、このオブジェクトテーブルを作成し、分析を行います。
手順としてまずはBigqueryとVertexAIとCloud Storageを外部接続できるように設定をしましょう。
BigQueryのコンソールから「データの追加」を押下。
右から再度パネルが表示されるので「データソースを検索 」から「Vertex AI」を検索
接続ID、リージョンを選択し、外部接続の設定を行います。
ここまで設定が完了したら、BigQueryのコンソールの「外部接続」に接続IDで指定した名称が表示されます。
次に外部接続用のサービスアカウントが作成されていますので、コンソールの表示にある「サービスアカウントID」をもとに下記権限の付与を行なってください。
- BigQuery 管理者
- Project IAM 管理者
- Storage オブジェクト管理者
- Vertex AI ユーザー
ではオブジェクトテーブルを作成します。コマンドは下記です。
CREATE OR REPLACE EXTERNAL TABLE `bqml_example.objects-example-table`
WITH CONNECTION `外部接続に追加した名称`
OPTIONS (
object_metadata = 'SIMPLE',
uris = [GCSのバケットパス]
);
CONNECTIONには外部接続で指定したIDを指定し、GCSのバケットパスには画像を配置したバケットのパスを指定します。
実際の実行結果が下記になります。
urlsにはワイルドカードを使用することが可能で、対象バケットの全ての比構造化オブジェクトをBigQueryMLで実行することが可能になります。
③リモートモデルの作成
リモートモデルを作成します。今回はgemini-2.5-flashを利用しています。
CREATE OR REPLACE MODEL `bqml_example.gemini-20`
REMOTE WITH CONNECTION `外部接続に追加した名称`
OPTIONS (
ENDPOINT = 'gemini-2.5-flash'
);
リモートモデルとは、BigQueryのSQL環境から、外部のサービス(今回はVertex AI)を呼び出すための機能になります。
では実際に実行してみましょう。
指定したデータセット内にモデルがが追加されました。
④BigQueryMLを利用して画像認識
それではBigQueryMLを実行しましょう。クエリは下記です。
SELECT
uri,
ml_generate_text_llm_result
FROM
ML.GENERATE_TEXT (
MODEL `③で実施したモデルを指定`,
(
SELECT
*
FROM
`②で実施したオブジェクトテーブルを指定 `
WHERE
content_type = 'image/jpeg' -- 画像ファイルのみを対象とする
),
STRUCT (
0 AS temperature,
'写っている動物はなんですか?' AS PROMPT, -- 画像認識の指示
2048 AS max_output_tokens,
TRUE AS FLATTEN_JSON_OUTPUT
)
);
②、③で作成した、オブジェクトテーブルとリモートモデルをそれぞれ指定します。「ML.GENERATE_TEXT」「STRUCT〜」と記載しているところからが具体的なBigQueryMLのパラメータになります。
STRUCT内で指定しているのがプロンプトのパラメータになります。今回はプロンプトとして「写っている動物はなんですか?」として②で指定したオブジェクトテーブルにあるGCSの情報をもとに画像認識を行っています。
では実際に実行してみましょう。
猫の画像には「写っている動物は猫です」「写っている動物は柴犬(しばいぬ)です」が出力され、GCSにある画像の認識ができました!
終わりに
本記事では、BigQuery MLとGeminiを活用し、Google Cloud Storageに保存された画像データをSQLベースで簡単に分析・認識する方法について解説しました。これにより、非構造化データである画像も構造化データと同様に統合管理でき、複雑なプログラミングを必要とせず、効率的かつ安全にマルチモーダル分析を実施できることがお分かりいただけたかと思います。
「BigQueryのみでマルチモーダルの分析がしたい!」となった時本ブログが参考になれば幸いです。
- カテゴリ:
- Firebase