[[BigQuery]] の AI 関数 (`AI.GENERATE()`, `AI.EMBED()`, `ML.TRANSLATE()` 等) を実行すると、料金は **BigQuery 側**と **[[Vertex AI]] 側**の 2 箇所で発生する。
この二重構造を理解しないと、BigQuery の課金レポートだけを見て「意外と安い」と誤解し、Vertex AI 側の料金で後から驚くことになる。
## BigQuery 側の料金
[[SQL]] 実行そのものに対する課金で、通常の BigQuery クエリと同じ体系が適用される。
- **on-demand**: クエリがスキャンしたバイト数 (`total_bytes_billed`)
- **reservations (Editions)**: スロット時間 (`total_slot_ms`)
AI 関数を含むクエリは推論完了待ちで**スロット保持時間が長くなりがち**なため、reservations 運用時はスロット消費の監視が重要。
## Vertex AI 側の料金
呼び出されたモデルの**トークン課金**。入力トークンと出力トークンで単価が異なる。
- `gemini-2.5-flash`: `gemini-2.5-pro` の約 1/10 の単価
- `text-embedding-*` 系: 入力トークンのみ課金、出力は無料
- 同じプロンプトでも**モデル選択で 10 倍のコスト差**が出る
## 監視のポイント
| 対象 | 確認先 |
| ------------------ | ------------------------------------------------------------------ |
| BigQuery 側コスト | `INFORMATION_SCHEMA.JOBS` の `total_bytes_billed` / `total_slot_ms` |
| Vertex AI 側コスト | Cloud Billing レポート (SKU: `Vertex AI Online Prediction` 等) |
**2 つのレポートは別**なので、AI 関数を含むジョブの真のコストを知るには両方を結合して $ / 1k rows を算出する必要がある。
## 節約の打ち手
- **モデル選択**: 品質が足りるなら `flash` / `flash-lite` を選ぶ (pro 比 1/10)
- **[[BigQuery マネージド AI 関数|マネージド AI 関数]]の optimized mode** (2026-04 Preview): [[BigQuery AI.IF 関数|AI.IF()]] / `AI.CLASSIFY()` は蒸留モデル (distilled model) をクエリ実行中に自動学習し、大半の行をそれで処理することで LLM 呼び出し回数を削減できる ([[BigQuery AI.SCORE 関数|AI.SCORE()]] は非対応)
- **Provisioned Throughput** (`request_type => 'DEDICATED'`): 大量ジョブは単価を固定化
- **[[dbt]] の `incremental`**: 既に AI 処理済みの行を再処理しない設計 (Phase 6 相当)
## 関連ノート
- **[前提]** [[BigQuery から Vertex AI を呼ぶための最小セットアップ]]: 本ノートの課金が発生する前段として、この接続設定が済んでいる必要がある