[[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 を呼ぶための最小セットアップ]]: 本ノートの課金が発生する前段として、この接続設定が済んでいる必要がある