データ処理・分析 種別:マネージドサービス 成熟度 安定 学習コスト 中

BigQuery

サーバーレスで TB 級のデータを SQL で集計する、Google Cloud のデータウェアハウス

分野「データ処理・分析」:溜まったデータを集計・変換・可視化する。 分野の役割とつながりは分野の解説へ。

別名:BQ、Google BigQuery、Google Cloud BigQuery

できること

BigQuery ができないこと

  • 行単位の高頻度な更新・削除を受けるアプリのバックエンド(OLTP)。DML の同時実行はテーブル単位で制限され、1行の更新でもスキャン量で課金される
  • ミリ秒単位の応答が必要な画面の直接のデータ源(クエリは秒単位。結果はキャッシュや別 DB に置く)
  • スキャン量の読めないアドホッククエリを無制限に許すこと(SELECT * が請求に直結する。カスタムクォータで上限を切る)
  • オンプレミスやローカル環境での実行(マネージド専用。手元で同じ SQL を動かすなら DuckDB 等)

制約

先頭の行が、このツールで最も先に当たる制約。値はすべて出典の一次情報で確認したもの。

項目 影響 出典 検証日
オンデマンド課金の単価と最低課金 (主要制約) 処理(スキャン)量 1 TiB あたり $6.25(料金ページの既定表示リージョン。リージョンで異なる)。毎月最初の 1 TiB は無料。1クエリあたり、および参照テーブルごとに最低 10 MB を課金。エラーになったクエリとキャッシュヒットは無課金 費用は「行数」ではなく「読んだ列のバイト数」で決まる。パーティション・クラスタリングと列の絞り込みなしに大テーブルへ繰り返し問い合わせると、無料枠 1 TiB は数回で消える。1日のスキャン量はプロジェクト単位のカスタムクォータで上限を切れる(既定 200 TiB / 日) cloud.google.com
クエリ実行時間の上限 6 時間 / クエリ(マルチステートメントクエリも同じ) 6 時間で失敗するため、巨大な変換は中間テーブルに分割する。通常の集計は数秒〜数分で終わるので、ここに当たるのは設計の問題である docs.cloud.google.com
オンデマンドの同時スロット数 2,000 スロット / プロジェクト、20,000 スロット / 組織 同時に多数のクエリを流すと互いにスロットを取り合い、個々のクエリが遅くなる。安定した性能が必要なら Editions(スロット時間課金)で容量を確保する docs.cloud.google.com
テーブル変更回数と INSERT DML の同時実行 1,500 変更 / テーブル / 日(ロード・コピー・追記/上書きクエリが各1回)。INSERT DML はテーブルあたり 1,500 文まで即時実行、超えると同時実行が 10 に制限される 1分ごとに小さなロードジョブで追記する設計は1日で上限に当たる。バッチをまとめるか、Storage Write API によるストリーミングに切り替える(別料金) docs.cloud.google.com
クエリ応答サイズの上限 10 GB(圧縮時)。宛先テーブルへ書き出す場合は無制限 大きな結果を API で直接受け取ることはできない。結果はテーブルに書き、エクスポートか Storage Read API で取り出す docs.cloud.google.com
ストレージ料金と無料枠 アクティブ論理ストレージ $0.000031507 / GiB・時(月換算で約 $0.023 / GiB)、90 日変更なしの長期ストレージ $0.000021918 / GiB・時。毎月最初の 10 GiB は無料。バッチロードは無料、ストリーミング挿入(Storage Write API REST)は $0.01 / 200 MiB 保存自体は安価で、費用の中心はクエリのスキャン量になる。ただし高頻度の小さな書き込みをストリーミングにすると、保存より書き込み料金が先に効く cloud.google.com

典型的な落とし穴

  • LIMIT を付けても課金は減らない。読む列と読むパーティションを絞ることだけがスキャン量を減らす
  • パーティション列で絞らない WHERE(関数で加工した日付など)はフルスキャンになる。パーティションフィルタ必須の設定を有効にする
  • ダッシュボードの自動更新やスケジュールクエリが裏で毎回フルスキャンし、月末に請求で気づく。プロジェクト単位のカスタムクォータと請求アラートを先に設定する
  • テーブルの結果を BI ツールから直接毎回叩くと遅くて高い。集計済みの小さなテーブルを作り、BI はそこを見る

コスト

課金モデル
無料枠あり
跳ねる条件

毎月 1 TiB のクエリと 10 GiB のストレージまで無料。跳ねるのはスキャン量で、パーティションのない大テーブルへの繰り返しクエリと、BI ツールの自動更新が典型。書き込みはバッチロード無料、ストリーミングは別料金

出典
cloud.google.com  検証

代替手段と差分

代替 何が違うか
DuckDB DuckDB は手元の1台で無料に動き、ローカルや S3 上のファイルを直接読めるが、1台の CPU・メモリ・ディスクが上限で複数人での共有に弱い。BigQuery はサーバーレスで TB〜PB 級を扱い、チームで共有し権限管理できるが、スキャン量課金と Google Cloud への取り込みが前提。1台に収まる規模なら DuckDB
PostgreSQL PostgreSQL は行単位の更新・トランザクション・低遅延の問い合わせに強く、アプリのバックエンドになれる。BigQuery は更新に弱く応答は秒単位だが、数十億行の集計を分散実行する。業務データの正本は PostgreSQL、そこから複製した履歴の分析は BigQuery という分担が典型
pandas pandas は Python 上で細かい加工と可視化ができるがメモリが上限。BigQuery で粗く集計した数万行を pandas に落として加工・描画する組み合わせが実務の標準

このツールを代替として挙げているページ: DuckDBpandas

選定判断

数百 GB〜TB 級のログ・イベント・履歴データを SQL で集計し、チームで共有・可視化する用途では第一候補で、無料枠だけで検証を始められる。行単位の更新が多いデータ、ミリ秒応答が要る画面のデータ源、1台に収まる規模でスキャン課金を避けたい場合は避け、PostgreSQL や DuckDB へ

Google Cloud のサーバーレスなデータウェアハウスで、サーバーやインデックスの管理をせずに SQL を投げると、数十億行でも分散実行で数秒〜数分で返る。ストレージと計算が分離しており、保存は安価で、計算はスキャン量(オンデマンド)かスロット時間(Editions)で課金される。スケジュールクエリで定期集計を回し、Looker Studio 等の BI から直接参照する構成が典型である。

利用者が最初に当たる制約は性能ではなく課金の仕組みである。費用は「読んだ列のバイト数」で決まり、行数や LIMIT では減らない。無料枠 1 TiB / 月は検証には十分だが、パーティションのない大テーブルを BI ツールが自動更新で繰り返し叩くと数日で消える。カスタムクォータと請求アラートを最初に設定してから使い始めるのが前提である。