Contents
1. ストレージ料金の基本構造と東京リージョンでの単価
BigQuery のストレージ費用は、データが アクティブ(直近 90 日以内にアクセス)か 長期(180 日以上保持)かで異なります。東京リージョン (asia‑northeast1) の公式単価を以下にまとめました。
| ストレージ種別 | 単価(USD / TB・月) | 主な利用シーン |
|---|---|---|
| アクティブ | $6.25 | 直近 90 日以内に頻繁に参照するデータ |
| 長期ストレージ | $1.87 | 180 日以上保持し、アクセス頻度が低いデータ |
注記:本表は Google Cloud の公式料金ページ(2025 年版)から抜粋しています。為替変動による JPY 換算は、2025 年 10 月時点のレート 1 USD = 150 JPY を使用しています(外貨換算レート)。
コスト削減の第一歩
- 自動ライフサイクルを設定して、90 日経過後に長期ストレージへ移行させるだけで、1 TB あたり月額 $4.38 のコスト差が実現できます。
- 具体的な手順は次節「2‑1」で詳述します。
2. 従量課金(オンデマンド)と容量ベース(フラットレート)の選択肢
BigQuery では オンデマンド課金 と フラットレート(容量ベース)課金 の 2 つの料金モデルが提供されています。どちらを採用すべきかは、月間使用量と予算管理の方針で決まります。
2‑1. 料金体系比較表
| 課金モデル | 主な特徴 | 月間上限(目安) | 参考単価 (USD / TB) |
|---|---|---|---|
| オンデマンド | 使用したストレージとクエリ実行量に対して従量課金 | 無制限 | $6.25(アクティブ) |
| フラットレート(容量ベース) ※公式名称は “Flat‑rate (capacity) pricing” |
固定月額+超過分従量課金。大規模・安定利用に向く | 10 TB 〜 100 TB | 約 $5.00 / TB(10 TB) 約 $3.50 / TB(100 TB) |
出典:Google Cloud の公式料金ページ – BigQuery Storage pricing
どちらがコスト効果的か?
- 月間使用量が 10 TB 前後 のプロジェクトは、フラットレートに切り替えるとオンデマンド比で約 20 % 削減できます。
- 100 TB 超 の大規模環境では、さらに 30 % 程度の削減が期待できるため、容量ベースが推奨されます。
3. テーブル自動ライフサイクルで即効コスト削減
3‑1. ライフサイクル設定の概要
BigQuery はテーブル単位で expiration_timestamp を指定でき、期限切れになると自動的に長期ストレージへ移行(または削除)されます。パーティションと併用すれば、データ保持ポリシーを細かく制御可能です。
3‑2. SQL スクリプト例(30 日保持・日次パーティション)
|
1 2 3 4 5 6 7 8 9 10 11 |
-- デイリーパーティションテーブルを作成し、30 日経過したデータは自動削除 CREATE OR REPLACE TABLE `myproj.sales.daily` PARTITION BY DATE(event_timestamp) OPTIONS ( expiration_timestamp = TIMESTAMP_ADD( CURRENT_TIMESTAMP(), INTERVAL 30 DAY) -- データ保持期間 ) AS SELECT * FROM `myproj.raw.sales_raw`; |
ポイント
- テーブル全体に対する有効期限はexpiration_timestamp、パーティション単位の設定はPARTITION EXPIRATIONオプションで実現できます(詳細は公式ドキュメント参照)。
3‑3. ベストプラクティス
- 段階的な保持期間:新規テーブルは 30 日 → 必要に応じて 90 日へ延長し、業務要件とコストバランスを最適化。
- モニタリングクエリで残存データ量を定期的に確認。
|
1 2 3 4 5 6 7 8 |
SELECT table_id, SUM(size_bytes) / POWER(10,12) AS size_tb, expiration_timestamp FROM `myproj`.region-us.INFORMATION_SCHEMA.PARTITIONS WHERE table_name = 'daily' GROUP BY table_id; |
- Cloud Scheduler と組み合わせて、毎日 00:05 に上記クエリを実行し、異常があれば Cloud Monitoring へアラート送信。
4. パーティション&クラスタリングでスキャン量と保存容量を削減
4‑1. パーティション設計の選定基準
| データ特性 | 推奨パーティションタイプ |
|---|---|
| 時系列ログ・イベント | 日付/時間 (DATE(event_time)) |
| カテゴリ別集計が頻繁 | 列値 (STRING(product_category)) |
| データ量が不均等 | 整数範囲 (RANGE_BUCKET(id, GENERATE_ARRAY(1,1000,10))) |
実装例(日付パーティション)
|
1 2 3 4 5 |
CREATE OR REPLACE TABLE `myproj.analytics.session` PARTITION BY DATE(session_start) AS SELECT * FROM `myproj.raw.session_raw`; |
4‑2. クラスタリングで圧縮率とクエリコストを向上
- 対象列はフィルタや GROUP BY に頻出し、カーディナリティが中程度(数千〜数万)なものに限定します。
- 高カーディナリティの列は逆効果になるため注意。
実装例(クラスタリング)
|
1 2 3 4 5 6 |
CREATE OR REPLACE TABLE `myproj.analytics.session` PARTITION BY DATE(session_start) CLUSTER BY user_id, country_code AS SELECT * FROM `myproj.raw.session_raw`; |
4‑3. 効果測定
同一クエリで パーティション+クラスタリング導入前は 120 GB のスキャン、導入後は約 84 GB(≈30 % 削減)となります。実績は Google Cloud のベストプラクティスガイドに記載されています(BigQuery Partitioning & Clustering)。
5. バックアップテーブル・スナップショットの自動削除
5‑1. 削除対象を抽出するクエリ
|
1 2 3 4 5 6 7 8 |
DECLARE tables ARRAY<STRING>; SET tables = ( SELECT ARRAY_AGG(table_id) FROM `myproj`.region-us.INFORMATION_SCHEMA.TABLES WHERE table_type = 'SNAPSHOT' AND creation_time < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY) ); |
5‑2. 一括削除スクリプト
|
1 2 3 4 |
FOR t IN UNNEST(tables) DO EXECUTE IMMEDIATE FORMAT('DROP TABLE `%s.%s`', 'myproj.backup', t); END FOR; |
5‑3. スケジューリング例
- Cloud Scheduler → Pub/Sub トリガー → BigQuery ジョブ と構成し、毎月 1 日に実行。
- 削除対象が無い場合はジョブがスキップされるため、安全に運用できます。
6. マテリアライズドビューと BI Engine のコスト・効果
6‑1. 機能概要と費用構造
| 項目 | 主なメリット | ストレージへの影響 |
|---|---|---|
| マテリアライズドビュー | クエリ結果を事前に保存し、スキャン量最大 80 % 削減(公式事例) | 集計結果は元データの約 5‑15 % のサイズで保存 |
| BI Engine | メモリ上キャッシュでレイテンシが大幅低下。ストレージ追加費用はなし | 月額 $0.02/GB(メモリ使用量に応じて課金) |
出典:Google Cloud の公式ドキュメント – Materialized Views / BI Engine pricing
6‑2. コストモニタリング例
|
1 2 3 4 5 6 7 8 9 |
-- 前日分のスキャン量とコストを集計 SELECT DATE(creation_time) AS dt, SUM(total_bytes_processed) / POWER(10,12) AS scanned_tb, SUM(cost) AS cost_usd FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) GROUP BY dt; |
- Cloud Monitoring アラート
- 「スキャン量が前月比で10 % 超過」または「コストが $500 を超えた場合」に通知。設定手順は公式ガイド(Monitoring alerts)を参照。
6‑3. ROI 計算の簡易式
[
ROI = \frac{\text{年間削減額 (USD)}}{\text{導入費用 (USD)}} \times 100\%
]
例:導入費用 $30,000、年間削減額 $540,000 → ROI = 1,800 %。
7. 全体まとめと実装ロードマップ
| フェーズ | 実施項目 | 期待効果 |
|---|---|---|
| ① 基礎把握 | 料金表確認、為替レートで JPY 換算 | 正確なコスト認識 |
| ② 自動ライフサイクル | expiration_timestamp 設定+スケジューラ |
アクティブ/長期差の最大化(≈$4.38/TB) |
| ③ パーティション&クラスタリング | キー設計・実装 | スキャン量 30 % 削減、圧縮率向上 |
| ④ フラットレート移行検討 | 使用量シミュレーション → 容量ベース課金へ切替 | 月額コスト最大 30 % 削減 |
| ⑤ バックアップ・スナップショット削除 | 定期クリーンアップジョブ | 不要領域ゼロ化 |
| ⑥ 高度最適化 | マテリアライズドビュー、BI Engine 導入 + 監視設定 | クエリレイテンシ短縮・スキャン量更なる削減 |
実装のポイント:まず「料金把握」→「自動ライフサイクル」の2 歩を完了させると、即座に数千ドル規模の削減が見込めます。その後、データ構造(パーティション・クラスタリング)と課金モデルを見直すことで、長期的な ROI を大幅に向上させられます。
参考リンク(全て公式ドキュメント)
- BigQuery Storage pricing – https://cloud.google.com/bigquery/pricing#storage-pricing
- Partitioned tables – https://cloud.google.com/bigquery/docs/partitioned-tables
- Clustering – https://cloud.google.com/bigquery/docs/clustered-tables
- Materialized Views – https://cloud.google.com/bigquery/docs/materialized-views
- BI Engine pricing – https://cloud.google.com/bi-engine/pricing
- Cloud Scheduler – https://cloud.google.com/scheduler/docs
- Monitoring alerts – https://cloud.google.com/monitoring/alerts
本ガイドは、2025 年 10 月時点の公式情報に基づき作成しています。料金や機能は予告なく変更される可能性があるため、導入前に必ず最新ドキュメントをご確認ください。