BigQuery の AI 関数(AI.GENERATE / AI.EMBED / AI.SIMILARITY)を SQL で使う方法

BigQuery で AI を使うというと、これまでは Python スクリプトや Vertex AI のコンソールを使うイメージがあったのではないでしょうか。

2025〜2026 年にかけて BigQuery に追加された「AI 関数」を使えば、SELECT 文を書くだけで Gemini などの生成 AI を呼び出せるようになりました。テキストの要約・感情分析・分類・ベクトル生成・類似度計算といった処理を、データパイプラインの中でそのまま実行できます。

この記事では、AI.GENERATEAI.EMBEDAI.SIMILARITY の 3 つの関数を中心に、実際に BigQuery Studio で動かせる SQL サンプルを交えて解説します。

この記事でわかること

  • BigQuery AI 関数の概要と従来の BigQuery ML との違い
  • 利用に必要な IAM 権限と前提条件
  • AI.GENERATE でテキスト生成・感情分析をする方法
  • AI.EMBED でエンベディングを生成してベクトル検索に活用する方法
  • AI.SIMILARITY で類似度スコアを計算する方法
  • コストと注意点

前提条件・検証環境

項目内容
対象サービスBigQuery(Google Cloud)
実行環境BigQuery Studio(インタラクティブクエリ)
確認時期2026 年 6 月時点
必要な APIVertex AI API(有効化が必要)
必要な IAM ロールBigQuery ジョブユーザー+Vertex AI ユーザー

バッチ処理(Scheduled Queries など)で利用する場合は、別途 BigQuery 接続(Cloud Resource Connection)とサービスアカウントの設定が必要です。この記事ではインタラクティブなクエリ実行を前提として説明します。

BigQuery AI 関数とは

BigQuery AI 関数は、SELECT 文の中から直接 Vertex AI の生成 AI モデルを呼び出せる組み込み関数群です。

従来の BigQuery ML では CREATE MODEL でリモートモデルを作成する必要がありましたが、AI 関数では接続設定やモデル作成なしに、IAM 権限のみで呼び出せるように設計されています(エンドユーザー認証 / EUC を使用した場合)。

主要な AI 関数の一覧を以下に示します。

関数名役割
AI.GENERATEテキスト生成、要約、分類、感情分析、情報抽出など汎用的な推論
AI.GENERATE_TABLE出力スキーマを指定した構造化データ抽出
AI.EMBEDテキストや画像からエンベディング(ベクトル)を生成
AI.SIMILARITY2 つの入力の意味的な類似度(コサイン類似度)を計算
AI.IF条件分類(ブール値を返す)
AI.CLASSIFY複数クラスへの分類

手順 1:前提条件を確認する

Vertex AI API を有効化する

Google Cloud コンソールの検索バーで「Vertex AI API」を検索し、対象プロジェクトで API が有効になっていることを確認します。

有効でない場合は「有効にする」ボタンをクリックします。

IAM 権限を確認する

BigQuery AI 関数をインタラクティブに実行するには、クエリを実行するユーザーに以下の 2 つのロールが必要です。

  • BigQuery ジョブユーザー(roles/bigquery.jobUser)
  • Vertex AI ユーザー(roles/aiplatform.user)

プロジェクトオーナーであれば、これらの権限はすでに含まれているため追加設定は不要です。

権限を確認・付与するには、Google Cloud コンソールの「IAM と管理」→「IAM」を開き、対象ユーザーのロールを確認します。

権限が不足している場合は管理者に依頼してください。または SQL で付与することもできます。

-- プロジェクト管理者が実行する場合の例
GRANT `roles/aiplatform.user`
ON PROJECT `your-project-id`
TO 'user:analyst@example.com';

手順 2:AI.GENERATE でテキスト生成・感情分析をする

AI.GENERATE は最も汎用的な AI 関数で、プロンプトを与えてテキストを生成・推論させます。

基本的な構文

SELECT AI.GENERATE(
  prompt => 'ここにプロンプトを書く',
  model  => 'gemini-2.0-flash'
)

prompt と model は名前付き引数です。model に指定できる値は gemini-2.0-flashgemini-1.5-pro などの Vertex AI で利用可能なモデル名です。2026 年 6 月時点では gemini-2.0-flash が一般的です。

例 1:商品レビューの感情分析

SELECT
  review_id,
  review_text,
  AI.GENERATE(
    prompt => CONCAT(
      '以下の商品レビューを「ポジティブ」「ネガティブ」「ニュートラル」のいずれかで分類し、',
      '分類結果だけを出力してください。\n\nレビュー: ', review_text
    ),
    model => 'gemini-2.0-flash'
  ) AS sentiment
FROM
  `your_project.your_dataset.reviews`
LIMIT 10;

返り値は文字列型(STRING)です。出力を JSON や構造化されたテーブルとして扱いたい場合は、後述の AI.GENERATE_TABLE が適しています。

例 2:複数行まとめて要約する(ARRAY_AGG との組み合わせ)

SELECT
  product_id,
  AI.GENERATE(
    prompt => CONCAT(
      '以下の複数のレビューを 3 文以内で要約してください。\n\n',
      ARRAY_TO_STRING(ARRAY_AGG(review_text), '\n---\n')
    ),
    model => 'gemini-2.0-flash'
  ) AS summary
FROM
  `your_project.your_dataset.reviews`
GROUP BY
  product_id;

例 3:出力形式を指定する(AI.GENERATE_TABLE)

感情ラベルと信頼スコアをカラムとして取得したい場合は、AI.GENERATE_TABLE が便利です。

SELECT *
FROM AI.GENERATE_TABLE(
  model => 'gemini-2.0-flash',
  table => (
    SELECT review_id, review_text
    FROM `your_project.your_dataset.reviews`
    LIMIT 5
  ),
  prompt_column => 'review_text',
  output_schema => JSON '{
    "type": "object",
    "properties": {
      "sentiment": {"type": "string"},
      "confidence": {"type": "number"}
    }
  }'
);

出力には sentiment と confidence のカラムが含まれます。

手順 3:AI.EMBED でエンベディングを生成する

AI.EMBED は、テキストや画像を高次元のベクトル(エンベディング)に変換する関数です。意味的に近いテキストは近いベクトルになるため、類似検索やクラスタリングに活用できます。

基本的な構文

SELECT AI.EMBED(
  content  => '検索クエリのテキスト',
  model    => 'text-embedding-005'
)

model に指定できる値は text-embedding-005text-multilingual-embedding-002 などのエンベディングモデルです。日本語テキストを扱う場合は text-multilingual-embedding-002 が適しています。

例 1:テーブルの各行にエンベディングを付与する

SELECT
  document_id,
  content,
  AI.EMBED(
    content => content,
    model   => 'text-multilingual-embedding-002'
  ) AS embedding
FROM
  `your_project.your_dataset.documents`;

返り値は ARRAY<FLOAT64> 型です。このベクトルを別のテーブルに保存しておき、クエリ時に AI.SIMILARITY と組み合わせることで、ベクトル類似検索が実現できます。

注意点

エンベディングの生成は行ごとに API を呼び出すため、大量の行に適用すると処理時間とコストが増大します。バッチで実行する場合は LIMIT でサンプル数を絞って動作を確認してから、本番データに適用することをおすすめします。

手順 4:AI.SIMILARITY で類似度スコアを計算する

AI.SIMILARITY は 2 つのテキストや画像の意味的な近さをコサイン類似度(0〜1 のスコア)で返す関数です。AI.EMBED でベクトルを生成して自前で計算する手間を省けます。

基本的な構文

SELECT AI.SIMILARITY(
  content1 => 'テキスト A',
  content2 => 'テキスト B',
  model    => 'text-multilingual-embedding-002'
)

スコアは 0〜1 で、1 に近いほど意味的に類似しています。

例 1:ユーザーの検索クエリに近いドキュメントを探す

SELECT
  document_id,
  title,
  AI.SIMILARITY(
    content1 => 'BigQuery でデータを高速にロードする方法',  -- 検索クエリ
    content2 => title,
    model    => 'text-multilingual-embedding-002'
  ) AS similarity_score
FROM
  `your_project.your_dataset.documents`
ORDER BY
  similarity_score DESC
LIMIT 5;

例 2:重複コンテンツの検出

SELECT
  a.doc_id AS doc_a,
  b.doc_id AS doc_b,
  AI.SIMILARITY(
    content1 => a.content,
    content2 => b.content,
    model    => 'text-multilingual-embedding-002'
  ) AS similarity_score
FROM
  `your_project.your_dataset.documents` AS a
JOIN
  `your_project.your_dataset.documents` AS b
  ON a.doc_id < b.doc_id
HAVING
  similarity_score > 0.95
ORDER BY
  similarity_score DESC;

類似度スコアが 0.95 以上の組み合わせを重複候補として抽出する例です。

うまくいかない場合の確認ポイント

「API が有効ではありません」というエラー

Google Cloud コンソールで対象プロジェクトの Vertex AI API が有効になっているか確認してください。

「権限が不足しています」というエラー

クエリを実行するユーザーに roles/aiplatform.user ロールが付与されているか確認してください。プロジェクト管理者でない場合は、管理者に依頼して権限を付与してもらう必要があります。

結果が返ってくるまでに時間がかかる

AI 関数は 1 行ごとに Vertex AI API を呼び出します。対象テーブルの行数が多い場合、処理時間が長くなります。まずは LIMIT 10 など少数行で動作確認してから、本番データに適用するようにしてください。

model に指定したモデル名でエラーが出る

利用可能なモデル名はリリースと同時に変更されることがあります。2026 年 6 月時点では gemini-2.0-flash(テキスト生成)、text-multilingual-embedding-002(エンベディング)が動作することを確認しています。最新のモデル名は公式ドキュメントを参照してください。

コストについて

AI 関数は Vertex AI の API 呼び出しに対してトークン数に応じた課金が発生します。

  • AI.GENERATE:入力トークン数 + 出力トークン数に応じた課金
  • AI.EMBED:入力テキストのトークン数に応じた課金
  • AI.SIMILARITY:内部で 2 回のエンベディング生成が行われるため、その分課金

大量のデータに適用する前に、LIMIT でサンプル数を絞り、費用を概算してから本番実行することをおすすめします。BigQuery のクエリ料金(スキャン量に応じた課金)とは別に発生する点に注意してください。

よくある質問

従来の BigQuery ML(ML.GENERATE_TEXT など)との違いは?

従来の BigQuery ML では CREATE MODEL ステートメントでリモートモデルを定義してから使用する必要がありました。AI 関数では CREATE MODEL が不要で、関数の引数として直接モデルを指定できます。接続設定も、インタラクティブなクエリであれば EUC(エンドユーザー認証)により不要になっています。既存の ML.GENERATE_TEXT などとの互換性については、公式ドキュメントを確認してください。

バッチ処理(Scheduled Queries)でも使えますか?

はい、使えます。ただし Scheduled Queries などの非対話型処理では EUC が使えないため、別途 BigQuery 接続(Cloud Resource Connection)とサービスアカウントの設定が必要です。model 引数の代わりに connection_id と接続設定を用いた構文を使います。

日本語のテキストは扱えますか?

扱えます。エンベディングモデルとして text-multilingual-embedding-002 を使うと、日本語テキストに対して精度の高いベクトルが得られます。AI.GENERATE で使う Gemini モデルも日本語での入出力に対応しています。

画像も処理できますか?

はい、AI.EMBED や AI.GENERATE は Cloud Storage 上の画像ファイルを ObjectRef 型として参照することで画像への適用が可能です。具体的な手順については公式ドキュメントを参照してください。

まとめ

BigQuery の AI 関数(AI.GENERATE / AI.EMBED / AI.SIMILARITY)を使えば、Vertex AI の生成 AI モデルを SQL のみで呼び出せます。

ポイントをまとめます。

  • 利用に必要なのは Vertex AI API の有効化と 2 つの IAM ロールのみ
  • AI.GENERATE は感情分析・要約・分類など汎用的な推論に使える
  • AI.GENERATE_TABLE は出力スキーマを指定して構造化データとして取得できる
  • AI.EMBED はテキストをベクトル化してベクトル検索に活用できる
  • AI.SIMILARITY は 2 つのテキストの意味的な類似度を直接計算できる
  • 大量データへの適用前には LIMIT でサンプル検証とコスト確認を行う

BigQuery をデータウェアハウスとして使っているチームが、既存の SQL スキルでそのまま AI 処理をパイプラインに組み込める点が最大のメリットです。まずは小規模なサンプルデータで試してみてください。

参考情報