🦁

大量のgeminiの呼び出しは、BigQueryのAI.GENERATEを使う

に公開

Geminiを大量のデータに対して推論を行わせたい

Bigqueryにあるテーブルデータに対して、Geminiを呼び出して推論を行いたい場合、BigqueryのAI.GENERATEを使いましょう

AI.GENERATEを利用すれば、コードを書くことなく、geminiを呼び出すことができます。

https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-generate

やり方

手順は簡単です

  1. geminiを呼び出すためのconnectionの作成
  2. 権限の付与
  3. Bigqueryにあるテーブルに対して、AI.GENERATEを使用したSQLを書くだけ
    以上になります。

1. Connectionの作成

  1. コンパスのアイコンをクリックしてエクスプローラーの表示。データの追加をクリック

    データの追加
  2. 右側のパネルの検索でvertexと入力し、Vertex AIをクリック

    VertexAIの検索
  3. BigQueryフェデレーションをクリック

    BigQueryフェデレーション
  4. 外部データソースの設定画面が表示されるので設定を入力する

    外部データソースの設定

設定内容

  • 接続タイプ*
    • Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース) を選択
  • 接続ID*
    • 後ほど使用するので、短くてわかりやすい名前を付けてください
  • ロケーションタイプ*
    • 接続の保存先を選択します
    • 詳しくはこちらをご覧ください
    • 処理を特定のリージョンのみで行いたい場合は、ロケーションタイプ: リージョンを選択すると次のフィールドで、リージョンの選択が可能になります
    • ご自身の要件に合わせて選択してください
    • 大量に呼び出すのであれば、マルチリージョンを選択することをお勧めします
  • リージョン*
    • ロケーションタイプで、リージョンを選択した場合は、処理をしたいリージョンを選択してください。
    • ロケーションタイプで、マルチリージョンを選択した場合は、EU or USのどちらかを選択してください
  • わかりやすい名前
    • わかりやすい名前を付けておきましょう
  • 説明
    • connectionの説明を入力してください

作成できたかの確認

左のエクスプローラーの部分から、外部接続をクリック
今作成したconnectionが表示されていれば、作成は完了です

2. 権限

IAMと管理 > IAMからBigQueryからGeminiを呼び出すユーザーに対して、Vertex AI User(roles/aiplatform.user)を追加してください。

詳しくはこちらをご覧ください
https://docs.cloud.google.com/bigquery/docs/generate-text-tutorial-gemini?hl=ja#grant-permissions

3. 使い方

基本的な使い方
普段のSQLに、AI.GENERATE関数を追加するだけです

SELECT
  city,
  AI.GENERATE(
    ('Give a short, one sentence description of ', city), -- LLMへの指示. prompt
    connection_id => 'us.test_connection', -- 先ほど作成したconnectionのid.  [PROJECT_ID].[LOCATION].[CONNECTION_ID]. 例: myproject.us.myconnection
    endpoint => 'gemini-2.0-flash').result -- 使用したいモデル名
FROM mydataset.cities;

AI.GENERATEの詳細

syntaxは下記になっています

AI.GENERATE(
  [ prompt => ] 'PROMPT', -- LLMの指示
  connection_id => 'CONNECTION' -- はじめに作成したconnection_id. [PROJECT_ID].[LOCATION].[CONNECTION_ID]. 例: myproject.us.myconnection
  [, endpoint => 'ENDPOINT'] -- モデル名. 
  [, request_type => 'REQUEST_TYPE']
  [, model_params => MODEL_PARAMS]
  [, output_schema => 'OUTPUT_SCHEMA']
)

注目すべきは、model_paramsと、output_schemaです

model_params

model_paramsは、モデル呼び出し時のパラメータを指定することができます。
model_paramsの詳細は、こちらを確認してください。
https://cloud.google.com/vertex-ai/generative-ai/docs/reference/rest/v1/projects.locations.publishers.models/generateContent#request-body

例:

SELECT 
  *
  , AI.GENERATE(
      prompt => ('プロンプト'),
      connection_id => 'us.bigquery_vertexai_connection',
      endpoint => 'gemini-2.5-flash',
      model_params => JSON '''
        {
          "generation_config": {
            "temperature": 0.1,
            "max_output_tokens": 1024,
            "thinking_config": {"thinking_budget": 0},
            "tools": [{"googleSearch": {}}]
          }
        }
      '''
    ).result
FROM `dataset.sample_dataset` LIMIT 10

thinking_budgetや、toolsにgoogleSearchなどを指定することができるようになります

output_schema

output_schemaは、structured outputでレスポンスを受け取る際のschemaを記載します
例:

SELECT 
  *
  , AI.GENERATE(
      prompt => ('プロンプト。categoriesとreasonを出力してください。'),
      connection_id => 'us.bigquery_vertexai_connection',
      endpoint => 'gemini-2.5-flash',
      model_params => JSON '''
        {
          "generation_config": {
            "temperature": 0.1,
            "max_output_tokens": 1024,
            "thinking_config": {"thinking_budget": 256}
          }
        }
      ''',
      output_schema => 'categories ARRAY<string>, reason string'
    ) as result
FROM `dataset.sample_dataset` LIMIT 10

注意点としては、output_schemaを指定すると、AI.GENERATEの結果がoutput_schemaに沿って帰ってきます
上記の例では、AI.GENERATE(...).categories, AI.GENERATE(...).reasonとなります

上の例を修正して、結果を列として取れるようにします

SELECT
  * except(result)
  , result.categories as categories 
  , result.reason as reason
FROM
(
  SELECT 
    *
    , AI.GENERATE(
      prompt => ('プロンプト。categoriesとreasonを出力してください。'),
        connection_id => 'us.bigquery_vertexai_connection',
        endpoint => 'gemini-2.5-flash',
        model_params => JSON '''
          {
            "generation_config": {
              "temperature": 0.1,
              "max_output_tokens": 1024,
              "thinking_config": {"thinking_budget": 256}
            }
          }
        ''',
        output_schema => 'categories ARRAY<string>, reason string'
      ) as result
FROM `dataset.sample_dataset` LIMIT 10
)

これで、Geminiの出力結果をカラムとして扱うことができます
また、AI.GENERATEの出力結果には、他にfull_response, statusが入っています

まとめ

pythonでgenaiを使うことなく、大量のデータに対して、genaiを使っているのと遜色なくgeminiをSQLだけで呼び出すことができます

マスターデータのカテゴリ拡張や、コンテンツの分類など大量に処理をしたい場合にSQLで呼び出して、データを拡張することが簡単にできるようになります

Discussion