※本ページにはプロモーション(広告)が含まれています
【2026年最新版】Google BigQuery無料枠(Sandbox)で月1TBクエリ制限を超えた対処法【完全ガイド】
Google BigQueryのSandbox(サンドボックス)は、クレジットカード登録なしで毎月1TBのクエリ処理と10GBのストレージを無料で利用できる、データ分析の入門に最適な環境です。ところが、BigQuery ML、GA4のエクスポート、巨大な公開データセットを扱い始めるとあっという間に1TB制限に到達し、「Quota exceeded(クォータ超過)」エラーで以降のクエリが一切実行できなくなります。本記事では、Sandboxの仕組みからクエリ最適化、パーティション・クラスタリング、有料プラン移行、コストアラート設定まで、超過したときに「次に何をすべきか」を体系的に解説します。

この記事でわかること
- BigQuery Sandboxの無料枠の正確な仕様(2026年版)
- 1TB制限超過時に発生するエラーメッセージとその意味
- クエリスキャン量を激減させる5つのテクニック
- パーティション分割テーブルとクラスタリングの正しい使い方
- 有料(オンデマンド/エディション)プランへの安全な移行手順
- Cloud Billingでの予算アラート・自動シャットダウン設定
- コスト超過を二度と起こさないための運用ルール
BigQuery Sandboxの無料枠の正確な仕様
2026年時点でBigQuery Sandboxの無料枠は次の通りです。
- クエリ処理量: 毎月1TiB(テラバイトでなくテビバイト=約1.099TB)まで
- アクティブストレージ: 10GiB
- 長期ストレージ: 別カウント(90日以上更新がないテーブルは料金が半額になる仕組みだがSandboxではほぼ意識不要)
- BigQuery ML: 月10GB分の作成・予測クエリまで無料
- BI Engine: 1GBまで無料
- データの有効期限: テーブル・パーティションは作成から60日で自動削除(Sandbox特有の制約)
ポイントは「クエリ処理量=スキャンしたバイト数」で課金カウントされることです。SELECT結果のサイズではなく、対象テーブル中で実際に読み込んだカラムのバイト数が積算されます。SELECT *は破滅的にカウントが増える原因になります。
1TB制限を超えたときの典型的なエラー
制限超過時には次のようなエラーがコンソールやAPIから返ります。
Quota exceeded: Your project exceeded quota for free query bytes scanned.Billing has not been enabled for this project.Custom quota exceeded: Project bytes per day.
これらが出た場合、以降のクエリは一切実行できません。翌月の自動リセット(毎月1日UTC 0時)まで待つか、有料プランへ移行する必要があります。
対処法1: クエリのスキャン量を見積もる癖をつける
BigQueryコンソールには、クエリ実行前にスキャン予定バイト数を表示する機能があります。これを必ず確認する癖をつけることで、1TB制限を意識した運用が可能になります。
- BigQueryコンソールでクエリエディタを開く
- クエリを書いて、右上の「実行前検証アイコン(緑のチェック)」を確認
- 「このクエリを実行すると XX GB が処理されます」と表示される
- その値が許容範囲か判断してから実行する
API経由でもdryRun: trueを指定すれば実行せずに見積もりだけ取得できます。
対処法2: SELECT *を絶対に書かない
SELECT *は、テーブル内全カラムを読み込むためスキャン量が爆発します。BigQueryはカラム指向ストレージなので、必要なカラムだけ列挙すれば該当カラムのバイト数だけがカウントされます。
-- 悪い例(テーブル全体のバイト数がカウントされる)
SELECT * FROM `project.dataset.events` WHERE event_date = '2026-04-21';
-- 良い例(指定したカラムのバイト数だけカウントされる)
SELECT user_id, event_name, event_timestamp
FROM `project.dataset.events`
WHERE event_date = '2026-04-21';
50カラムあるテーブルから3カラムだけ取れば、単純計算で約16倍のコスト削減になります。
対処法3: パーティション分割を活用する
パーティション分割テーブルは、日付・時刻・整数範囲でテーブルを物理的に分割し、WHERE句で該当パーティションだけを読み込めるようにします。
パーティション作成例
CREATE TABLE `project.dataset.events_partitioned`
PARTITION BY DATE(event_timestamp)
AS
SELECT * FROM `project.dataset.events`;
WHERE句でパーティション指定
SELECT user_id, event_name
FROM `project.dataset.events_partitioned`
WHERE DATE(event_timestamp) BETWEEN '2026-04-01' AND '2026-04-21';
こうすると4月1日〜21日分のパーティションだけがスキャンされ、過去データは一切読み込まれません。GA4データセットや日次ログデータでは特に絶大な効果があります。
対処法4: クラスタリングで絞り込みを高速化
クラスタリングは、よく使うフィルタ条件のカラムに沿って物理的にデータを並べ替える機能です。パーティションと組み合わせるとさらに強力です。
CREATE TABLE `project.dataset.events_clustered`
PARTITION BY DATE(event_timestamp)
CLUSTER BY country, user_id
AS
SELECT * FROM `project.dataset.events_partitioned`;
WHERE句でcountry = 'JP'を指定すれば、当該クラスタブロックだけを読み込みます。理論上は数十〜数百倍のスキャン削減が可能です。

対処法5: マテリアライズドビュー・サマリーテーブルを作る
同じ集計を毎回実行している場合、その結果を別テーブル(サマリーテーブル)またはマテリアライズドビューに保存しておけば、巨大な元テーブルを再スキャンする必要がなくなります。
-- マテリアライズドビュー作成
CREATE MATERIALIZED VIEW `project.dataset.daily_active_users` AS
SELECT
DATE(event_timestamp) AS event_date,
COUNT(DISTINCT user_id) AS dau
FROM `project.dataset.events_partitioned`
GROUP BY 1;
以降はdaily_active_usersに対するSELECTで済むため、スキャン量は数MB単位にまで減ります。
対処法6: 有料プランへ安全に移行する
無料枠で運用しきれなくなった場合は、有料プランへ移行します。2026年時点でBigQueryの料金体系は次の3種類です。
- オンデマンド: クエリスキャンしたバイト数に応じた従量課金(1TBあたり約7.5米ドル前後・リージョンによる)
- BigQuery Editions(Standard/Enterprise/Enterprise Plus): スロット予約型(時間単位課金)
- Capacity Commitments: 長期契約割引(年単位)
移行手順
- Google Cloud Consoleで「請求先アカウント」を作成(クレジットカード登録)
- 当該プロジェクトに請求先アカウントをリンク
- これだけで自動的に「オンデマンド課金」になり、1TB制限が解除される(無料枠の月間1TBは継続適用)
- 大量利用が見込まれる場合は、Editionsへ切り替えてスロット予約
対処法7: 予算アラート・カスタムクォータの設定
有料プランに移行したら、必ず予算アラートとカスタムクォータを設定してください。
予算アラート
- Cloud Console→「お支払い」→「予算とアラート」
- 「予算を作成」で対象プロジェクトと月予算金額(例: 50米ドル)を設定
- 50%・90%・100%でメール通知
カスタムクォータ(強制シャットダウン的に効く)
- Cloud Console→「IAMと管理」→「割り当て」
- 「BigQuery API」→「Query usage per day」「Query usage per day per user」を編集
- 1日あたりのバイト数を上限指定(例: 100GB/日)
カスタムクォータに達するとそれ以降のクエリは即拒否されるので、想定外の課金から守ってくれます。

料金プラン比較表
| プラン | 月クエリ上限 | 課金方式 | 向いている用途 |
|---|---|---|---|
| Sandbox(無料) | 1TiB | 無料 | 学習・趣味プロジェクト |
| オンデマンド | 無制限(プロジェクト2,000同時クエリ) | スキャンバイト従量 | 不定期・分析的用途 |
| Standard Edition | 無制限 | スロット時間単位 | 定常的なBI/ETL |
| Enterprise Edition | 無制限 | スロット時間単位 | セキュリティ強化要件あり |
| Enterprise Plus | 無制限 | スロット時間単位 | 規制業界・大規模分析 |
運用ルールチェックリスト
- SELECT *を書かない(必ずカラム指定)
- すべてのクエリでパーティション・クラスタリングを意識
- dry runでスキャン量を確認してから実行
- 長期保存テーブルはストレージクラスを「長期ストレージ」に
- 毎月1日の月初にスキャン量レポートをチェック
- カスタムクォータで日次上限を設定
- 予算アラートで複数閾値を設定
- サマリーテーブルとマテリアライズドビューを積極活用
FAQ
Q1. 1TB制限超過後すぐに使いたい場合は?
無料枠の解除を待つのは現実的ではないため、請求先アカウントをリンクしてオンデマンド課金に切り替えるのが最速です。月1TBは引き続き無料枠として適用されるので、超過分のみが課金されます。仮に1.5TB使った場合、超過0.5TB×単価で数米ドル程度です。
Q2. プロジェクトを作り直せば1TB枠もリセットされますか?
同一Googleアカウント内でプロジェクトを増やしても無料枠は累計でカウントされる仕組みのため、リセット目的での新規プロジェクト作成は推奨されません。利用規約違反と判断されるとアカウント自体が制限される可能性もあります。
Q3. パーティションを設定し直せば過去データもパーティション化されますか?
既存テーブルを直接パーティション化はできません。新しいパーティションテーブルを作成し、INSERT/CTASで再作成してください。CTASの場合、その操作自体が元テーブル全スキャンを発生させるので、月初など余裕のあるタイミングで一度だけ実行するのがおすすめです。
Q4. BigQuery MLの学習で大量に消費しています
MLは別途月10GB無料枠が用意されていますが、特徴量カラムの選別を厳しく行うことが重要です。MODEL作成時にも特徴量がカラムスキャンとして加算されるため、SELECT *相当の入力は避けてください。事前にサマリーテーブルを作っておくのが定石です。
Q5. 翌月にリセットされるのは何時ですか?
UTC 0:00(日本時間9:00)です。月初の早朝はリセット直後の混雑があるため、業務クエリは午前中以降に流すのが安全です。
まとめ
BigQuery Sandboxの月1TB制限は、SELECT *とパーティション未設定のテーブルを使い続けるとあっという間に到達します。逆に、本記事のクエリ最適化・パーティション・クラスタリング・サマリーテーブルを徹底すれば、同じ分析量を10分の1以下のスキャン量で完了でき、1TB枠でも数ヶ月余裕を持って運用できます。それでも足りなくなったら、請求先アカウントを設定してオンデマンド課金に切り替え、必ずカスタムクォータと予算アラートで自衛してください。BigQueryは正しく使えば数十TB規模のデータも秒単位で処理できる強力な分析基盤です。本記事のチェックリストを片手に、コストを抑えつつデータ分析を最大限活用しましょう。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!