はじめに
ゴルフ大好き、沖縄にあるちゅらデータでデータエンジニアをしている「kabi」です。
ここ最近はDWHの中でも生成AIを活用していこうという動きが社内でも活発に行われており、開発ツールやアプリケーション的利用以外の文脈でも生成AIが使われてきている印象があります。
私は社内でもBigQuery上で生成AIを活用するというプロジェクトに携わることが多く、BQ&Geminiを使ったシステム開発を担当しています。
BigQuery上で生成AIを活用する場合、アプリケーション開発をするケースとは異なる点がいくつかありましたので、その辺りについて書いてみようと思います。
下準備:Terraformで Gemini 2.5 Flash を BigQuery から利用するための環境を構築する
BigQuery で AI.GENERATE を使うには、Vertex AI への接続設定や IAM 権限が必要になるので、有効化します。
1. 必要なAPIの有効化
resource "google_project_service" "aiplatform_api" {
service = "aiplatform.googleapis.com"
}
resource "google_project_service" "bigqueryconnection_api" {
service = "bigqueryconnection.googleapis.com"
}
2. BigQuery Connection の作成(Cloud AI タイプ)
resource "google_bigquery_connection" "gemini_connection" {
connection_id = "gemini-connection"
location = "asia-northeast1"
description = "Connection for BigQuery AI GENERATE"
cloud_resource {}
}
Connectionを作ると、Google Cloud上の外部サービスを、ConnectionのService Account経由で使用できるようになります。
3. 必要な IAM 権限の付与
そのService Accountに権限を付与します。
resource "google_project_iam_member" "gemini_connection_user" {
project = var.project_id
role = "roles/aiplatform.user"
member = "serviceAccount:${google_bigquery_connection.gemini_connection.cloud_resource.service_account_id}"
}
使用方法:AI.GENERATE を SQL から呼び出す
BigQuery に生成AIを統合する主役が AI.GENERATE。
ここでは 手打ちプロンプト と テーブルの値を使った生成処理 の2パターンを紹介します。
① 手打ちのプロンプトで実行
select
ai.generate(
('日本の主要な輸出産業を教えて'),
connection_id => 'projects/project_name/locations/asia-northeast1/connections/gemini_connection',
endpoint => 'gemini-2.5-flash',
model_params => JSON '{"generation_config":{"thinking_config": {"thinking_budget": 0}}}'
).result as export_industry;
Gemini の結果が BigQuery のセルに export_industry という名前で返ってきます。
細かい設定は、 model_params にJSON形式で渡すことができます。
② テーブルのカラム内容に対して生成処理を行う
例:レビュー文(review_text)から要約を生成
SELECT
review_id,
review_text,
AI.GENERATE_TEXT(
connection_id => 'projects/project_name/locations/asia-northeast1/connections/gemini_connection',
model => 'gemini-2.5-flash',
prompt => CONCAT('次のレビューを100文字以内で要約してください: ', review_text)
) AS summary
FROM
`sample.reviews`
LIMIT 20;
Gemini on BigQuery の注意点:Global ロケーション、DSQ、そして課金
Gemini を BigQuery から呼び出す際には、アプリケーション開発と少し異なる 制約とコストのクセ があります。
1. BigQuery で日本から利用できるロケーションは “Global” のみ
2025年 現在、Gemini モデルは BigQuery 上では 日本リージョンで利用できません。
-
location = "us"またはlocation = "global"のデータセットが必要 - 日本リージョンのデータを使う場合、コピー or 転送が必要になる
👉 データ所在地制約が厳しいシステムでは採用時に要注意です。
→ なんかしれっと2.5-flashは日本リージョンからも使えるようになってました。多分最近だと思う
2. Dynamic Shared Quota(DSQ)
BigQueryに限った話ではないのですが、大量のデータを扱うBigQuery上でGeminiを使用する上では見過ごせない概念としてDSQというものがあります。
つまりは、明確なQuota Limitは存在せず、実行時点の世界中のVertex AIリソースに余剰がある場合は使用できるし、余剰がない場合は429エラーで使用できないというものです。
これがなかなか厄介で、どの程度の生成がどれくらいの時間で終わるのか、ということが読めなかったりするので、dbtを使ってバッチ的に生成を実施している場合、時間あたり最大何件程度処理できるのか、というのが決められないという問題が出てきます。
この問題は、プロビジョンドスループットを契約することで、お金を払えば回避できますが、安くないので要注意です。(1週間で$1,200なので、20万円くらい?)
- プロビジョンド スループットの概要 | Generative AI on Vertex AI | Google Cloud Documentation
- Provisioned Throughput | Vertex AI Pricing | Google Cloud
バッチ処理などで、大量のデータを処理するぞ、ということが決まっているのであれば、導入してみてもよいかもしれません。(使ったことないので使ってみたい)
まとめ:BigQueryくんとGeminiちゃん
BigQuery 上で生成 AI を扱えることで、データの分野ではその広がりが無限の可能性を秘めるようになってきました。
BigQueryくんとGeminiちゃんを上手に連携させて、データ基盤の新しい形を作っていきましょう!
この文章はちゅらいとで構成されています。
あと、9割くらいは生成AIで作りました。