大量のgeminiの呼び出しは、BigQueryのAI.GENERATEを使う
Geminiを大量のデータに対して推論を行わせたい
Bigqueryにあるテーブルデータに対して、Geminiを呼び出して推論を行いたい場合、BigqueryのAI.GENERATEを使いましょう
AI.GENERATEを利用すれば、コードを書くことなく、geminiを呼び出すことができます。
やり方
手順は簡単です
- geminiを呼び出すための
connectionの作成 - 権限の付与
- Bigqueryにあるテーブルに対して、AI.GENERATEを使用したSQLを書くだけ
以上になります。
1. Connectionの作成
- コンパスのアイコンをクリックしてエクスプローラーの表示。データの追加をクリック

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

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

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

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

2. 権限
IAMと管理 > IAMからBigQueryからGeminiを呼び出すユーザーに対して、Vertex AI User(roles/aiplatform.user)を追加してください。
詳しくはこちらをご覧ください
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の詳細は、こちらを確認してください。
例:
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