データウェアハウスとして知られる BigQuery は、通常、構造化されたデータを扱うためのツールです。しかし、近年、BigQuery ML (BQML) と Geminiとの連携により、画像や音声、PDFといった非構造化データもSQLベースで簡単に分析できるようになりました。
このブログでは、GCS(Google Cloud Storage)に保存されている画像ファイルをBigQueryに取り込み、SQLのクエリを叩くだけで、画像に何が写っているのかをGeminiに認識(マルチモーダル)させる手順を、具体例とともに解説します。
BigQueryでマルチモーダルの分析を行うメリットは下記になります。
上記のように、別途GeminiのAPIを呼び出すプログラミングをする必要がなく分析ができるため、とても効率的に分析することができます。
マルチモーダルを行う流れを下記に示します。
それでは具体的な手順を解説します。
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」をもとに下記権限の付与を行なってください。
ではオブジェクトテーブルを作成します。コマンドは下記です。
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を実行しましょう。クエリは下記です。
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のみでマルチモーダルの分析がしたい!」となった時本ブログが参考になれば幸いです。