Contents
1️⃣ 概要と公式リソース
| 項目 | 内容 | 参照先 |
|---|---|---|
| サンドボックス | ストレージ 10 GB とクエリ処理量 1 TB/月が無償。課金情報の入力は不要で、Google アカウントだけで即利用開始できる永続的無料枠。 | https://cloud.google.com/bigquery/docs/sandbox |
| $300 クレジット | Google Cloud 無料トライアルに登録すると、90 日間で $300 分のクレジットが付与され、BigQuery だけでなく他 GCP サービスも試せる。 | https://cloud.google.com/free |
2️⃣ サンドボックス有効化手順(コンソール)
- プロジェクト作成
-
コンソール左上の [プロジェクトを選択] → [+ 新しいプロジェクト] をクリック。名前と請求先アカウントは任意で OK。
-
BigQuery にアクセス
-
左側メニュー → [ビッグデータ] → [BigQuery] 。初回は「BigQuery の使用を開始しますか?」ダイアログが出るので [開始]。
-
サンドボックス有効化
- UI 上部に表示される緑色の [サンドボックスを有効にする] ボタンをクリックし、確認画面で「無料枠を使用します」へ同意すれば完了。
有効化後はコンソール上部に 「無料枠利用中」 バッジが表示されます。課金情報の入力は不要です。
変更点のポイント
- 手順は UI の変化に合わせて微調整が必要になることがありますが、概ね「プロジェクト作成 → BigQuery コンソール → サンドボックス有効化」の 3 ステップで完了します。
3️⃣ 無料枠(サンドボックス)の制限 – 2026 年 3 月最新版
| 制限項目 | 無料枠上限 | 超過時の課金単位・挙動 |
|---|---|---|
| ストレージ | 10 GB(データセット・テーブル合計) | $0.02/GB/月 |
| クエリ処理量 | 1 TB/月(スキャンされたデータ量) | $5/TB |
| 同時実行ジョブ数 | 最大 100 ジョブ* | 超過分はキュー待ち。課金は発生しないが、レイテンシ増大。 |
| テーブル作成上限 | 1 000 テーブル/プロジェクト | 超過時はエラーで作成不可。 |
| パーティション数 | 2 500 パーティション/テーブル | 超過するとスキャン量が増え、課金対象になる。 |
* 2024 年に同時実行ジョブ上限が 50 → 100 に緩和されたことを公式ドキュメントで確認してください。
※ 本表の数値は執筆時点の情報です。
最新情報は必ず https://cloud.google.com/bigquery/docs/sandbox#limits を参照し、プロジェクト作成後に 「課金」→「使用量と請求」 で実際の利用状況をモニタリングしてください。
4️⃣ Google スプレッドシートを外部テーブルとして直接クエリする方法
4.1 基本概念
BigQuery は GOOGLE_SHEETS フォーマットをサポートしており、スプレッドシートの URL を指定するだけで リアルタイム にデータ参照できます。ETL の手間が不要になるため、非エンジニアでも簡単に分析基盤を構築可能です。
4.2 手順(公式ドキュメント)
- スプレッドシートの共有設定
-
「リンクを知っている全員が閲覧可」に変更し、URL を取得。編集権限は不要です。
-
外部テーブル作成 SQL
|
1 2 3 4 5 6 7 8 |
CREATE EXTERNAL TABLE `my_project.my_dataset.sales_sheet` OPTIONS ( format = 'GOOGLE_SHEETS', uris = ['https://docs.google.com/spreadsheets/d/1aBcDeFgHiJkLmNoPqRstuVwxYz/edit#gid=0'], skip_leading_rows = 1, -- ヘッダー行をスキップ max_bad_records = 0 -- 不正レコードがあったらエラーにする ); |
- クエリ例
|
1 2 3 4 |
SELECT * FROM `my_project.my_dataset.sales_sheet` WHERE DATE(販売日) BETWEEN '2024-01-01' AND '2024-12-31'; |
4.3 制限とベストプラクティス(公式情報)
| 項目 | 上限・注意点 |
|---|---|
| シートサイズ | 1 シートあたり最大 5 MB、全体で約 200 万セル(Google の制限)。超過すると外部テーブル作成に失敗します。 |
| 更新遅延 | クエリ実行時に最新状態を取得しますが、内部キャッシュのため数秒〜十数秒程度のラグがあります。リアルタイム性が極端に重要な場合は定期的に CSV にエクスポートし、ネイティブテーブル化をご検討ください。 |
| 権限 | 参照対象シートに対する「閲覧」権限だけで OK。機密情報を扱う場合は組織の共有ポリシーに従い、リンク公開範囲を最小化してください。 |
公式ドキュメント: https://cloud.google.com/bigquery/docs/external-data-sheets
5️⃣ 課金アラートと「予算超過時の自動ジョブキャンセル」実装ガイド
5️⃣1 なぜ自動キャンセルが必要か
- クエリ課金はリアルタイム に発生し、通知だけでは超過分がすでに請求対象になるリスクがあります。
- 自動キャンセルを組み合わせることで「予算上限突破 → 直ちに実行中ジョブ停止」でき、意図しない課金を防げます。
5️⃣2 必要な GCP リソース
| リソース | 用途 |
|---|---|
| Cloud Billing Export(BigQuery データセット) | 課金情報をリアルタイムで Pub/Sub に流すためのエクスポート設定。 |
| Pub/Sub トピック | Billing Export から届く予算超過メッセージを Cloud Functions のトリガーにする。 |
| Cloud Functions (Python) | メッセージ受信 → 現在実行中の BigQuery ジョブを取得し、jobs.cancel API で停止。 |
| IAM ロール | roles/bigquery.jobUser(ジョブ一覧取得)+ roles/bigquery.admin(キャンセル権限)を Cloud Functions のサービスアカウントに付与。 |
5️⃣3 手順詳細
Step 1 – Billing Export の作成
- Cloud Console → Billing → Settings
- 「Export data to BigQuery」を有効化し、エクスポート先データセット(例:
billing_export)とテーブル名を指定。 - 「Enable streaming export to Pub/Sub」にチェックし、新規トピック
projects/<PROJECT_ID>/topics/billing-exportを作成。
Step 2 – 予算 (Budget) の設定
- Billing → Budgets & alerts → “+ CREATE BUDGET”。
- 対象プロジェクト/請求アカウント、予算額(例:$30)を入力。
- 「Alert threshold」に 50 %・75 %・100 % を設定し、通知方法は Pub/Sub → 作成した
billing-exportトピックを選択。
Step 3 – Cloud Functions のデプロイ
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# ディレクトリ作成 mkdir cancel_jobs && cd cancel_jobs # Python 用 requirements.txt cat <<EOS >requirements.txt google-cloud-bigquery==3.13.0 google-cloud-pubsub==2.20.0 EOS # main.py cat <<'EOS' >main.py import base64 import json import os from google.cloud import bigquery BUDGET_LIMIT = float(os.getenv('BUDGET_LIMIT', '30')) # 予算上限(USD) def cancel_jobs(event, context): """Pub/Sub メッセージを受信し、予算超過なら実行中ジョブをすべてキャンセルする""" try: payload = base64.b64decode(event['data']).decode() data = json.loads(payload) # Billing Export のスキーマに合わせて金額フィールド名を取得 cost = float(data.get('costAmount', 0)) if cost < BUDGET_LIMIT: return # 超過していなければ何もしない client = bigquery.Client() running_jobs = client.list_jobs(state_filter='RUNNING') cancelled = 0 for job in running_jobs: try: job.cancel() cancelled += 1 except Exception as e: # キャンセル失敗はログに残すだけで続行 print(f'Failed to cancel {job.job_id}: {e}') print(f'Budget exceeded (${cost}). Cancelled {cancelled} running jobs.') except Exception as exc: print(f'Error processing Pub/Sub message: {exc}') EOS # デプロイ gcloud functions deploy cancel_jobs \ --runtime python311 \ --trigger-topic billing-export \ --entry-point cancel_jobs \ --set-env-vars BUDGET_LIMIT=30 \ --region us-central1 \ --memory 256MB \ --timeout 60s |
ポイント解説
- costAmount は Billing Export のスキーマで「合計請求額(USD)」を示すフィールドです。
- 超過判定は 予算上限以上 になった瞬間に実行し、全ての RUNNING ジョブを順次キャンセルします。
- キャンセルできなかったジョブはログ出力のみで処理を続行するため、関数自体が失敗して再トリガーされることはありません。
Step 4 – 動作確認
| 手順 | 確認項目 |
|---|---|
| 1. テストジョブ実行 | bq query --use_legacy_sql=false 'SELECT COUNT(*) FROM \bigquery-public-data.samples.shakespeare' をバックグラウンドで走らせる。 |
| 2. 予算超過シミュレーション | テスト用に Budget → Threshold を 0 % に設定し、即座にトリガーさせる(実際の課金は発生しない)。 |
| 3. Cloud Functions ログ確認 | Cloud Console の Functions > Logs で「Cancelled X running jobs」のメッセージが出ていれば成功。 |
5️⃣4 ベストプラクティス
- IAM 最小権限:Function のサービスアカウントに
bigquery.jobs.cancel権限だけを付与し、不要な管理権限は除外する。 - モニタリング:Cloud Monitoring で
cloudfunctions.googleapis.com/function/execution_countとbigquery.googleapis.com/job/cancelledをダッシュボード化し、異常がないか定期的にチェック。 - 予算閾値の設定:50 %・75 % の二段階アラートを推奨。早めに手動でクエリを見直す余裕が生まれます。
6️⃣ 実務で活かせるユースケースと落とし穴チェックリスト
6.1 主なユースケース(サンドボックスでも実装可能)
| ユースケース | サンプルクエリ | ポイント |
|---|---|---|
| マーケティングレポート(GA4 イベント) | sql SELECT DATE(event_timestamp) AS event_date, traffic_source.medium, COUNTIF(event_name='purchase') AS purchases, SUM(event_value)/1e6 AS revenue_usd FROM |
_TABLE_SUFFIX でテーブルパーティショニングし、スキャン量を最小化。 |
| ログ集計(Cloud Logging エクスポート) | sql SELECT DATE(timestamp) AS log_date, resource.type AS service, COUNT(*) AS total_logs, COUNTIF(severity='ERROR') AS error_cnt FROM |
パーティショニングテーブル logs_* を活用し、1 TB 超えを防止。 |
| 売上分析(スプレッドシート外部テーブル) | sql SELECT product_id, SUM(quantity) AS total_qty, SUM(price*quantity) AS revenue FROM |
必要列だけ取得し、スキャン量削減。外部テーブルはサイズ上限に注意。 |
6️⃣2 落とし穴と対策(チェックリスト)
| 項目 | 落とし穴 | 対策 |
|---|---|---|
| 無駄なスキャン | SELECT * や不要列の参照で 1 TB 超過。 |
必要列だけを明示、テーブルパーティショニング/クラスタリングを活用。 |
| テーブル放置によるストレージ課金 | テスト用テーブルや古いスナップショットが残り続ける。 | bq ls --max_results=1000 で定期的に一覧取得し、使用期限切れは自動削除(Cloud Scheduler + bq rm)。 |
| CSV インポート時の課金 | 大量 CSV を Cloud Storage 経由でロードするとストレージ費がかかる。 | ローカルから bq load --autodetect のみ利用し、ロード後は元ファイルを削除。 |
| 予算アラートだけでは遅延 | 100 % 超過時にメール通知 → 手動停止まで数時間の遅れ。 | 上記の自動ジョブキャンセル機構と併用し、閾値 50 %・75 % の二段階アラートを設定。 |
| スプレッドシート外部テーブルのサイズ上限 | シートが肥大化して作成エラーになる。 | データ量が増えたら定期的に CSV エクスポートし、BigQuery ネイティブテーブルへ移行(パーティショニング+クラスタリング推奨)。 |
| 権限漏れ | 外部テーブルの閲覧権限を広く付与しすぎる。 | 組織ポリシーに従い、最小限の「閲覧」権限だけを付与し、共有リンクは限定的に設定。 |
7️⃣ まとめ
- サンドボックス は課金情報不要で即利用開始できる永続無料枠(10 GB ストレージ / 1 TB クエリ)。
- $300 クレジット は新規アカウント向けの試用期間。両者とも公式ドキュメントで最新情報を随時確認してください。
- Google スプレッドシート外部テーブル により、ETL コストゼロでリアルタイム分析が可能(ただしサイズ上限と遅延に留意)。
- 予算超過の自動ジョブキャンセル は Cloud Billing Export → Pub/Sub → Cloud Functions のフローで実装でき、数行のコードで安全性を確保できます。
- 実務ユースケース(マーケティングレポート・ログ集計・売上分析)はサンドボックスでも十分に実装可能。クエリ最適化と定期的なリソース監視が鍵です。
次のアクション
- 本稿の手順をプロジェクトで試し、「予算」→「使用量」 を毎日チェックする習慣をつける。
- 1 ヶ月ごとに 制限表 と IAM ポリシー の見直しを行い、最新の公式情報へアップデートする。