ブログ | XIMIX

BigQueryMLを使ってSQLだけでマルチモーダルをやってみよう!

作成者: XIMIX 北脇|2025.09.30

はじめに

データウェアハウスとして知られる BigQuery は、通常、構造化されたデータを扱うためのツールです。しかし、近年、BigQuery ML (BQML) と Geminiとの連携により、画像や音声、PDFといった非構造化データもSQLベースで簡単に分析できるようになりました。
このブログでは、GCS(Google Cloud Storage)に保存されている画像ファイルをBigQueryに取り込み、SQLのクエリを叩くだけで、画像に何が写っているのかをGeminiに認識(マルチモーダル)させる手順を、具体例とともに解説します。

BigQueryMLでマルチモーダルを行うメリット

BigQueryでマルチモーダルの分析を行うメリットは下記になります。

  1. 開発と操作の容易さ
    複雑なプログラミング言語を使用することなく、SQLベースでLLM(大規模言語モデル)の機能を利用できる点がメリットの一つです。
    これにより、BigQueryに格納されたデータを手軽に処理することができます。
  2. データ統合と管理
    構造化データと非構造化データを一つの場所で管理することを可能にします。そのため、画像や音声のデータの飛行増加データとDBに保存してある構造化データを同じ標準テーブル行に保存し、管理することができます

上記のように、別途GeminiのAPIを呼び出すプログラミングをする必要がなく分析ができるため、とても効率的に分析することができます。

全体の流れ

マルチモーダルを行う流れを下記に示します。

  1. GCSに識別させたい画像を配置
  2. オブジェクトテーブルを作成
  3. リモートモデル作成
  4. 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のみでマルチモーダルの分析がしたい!」となった時本ブログが参考になれば幸いです。