BigQuery ハンズオン教科書|2026-08 版
第 1 章

BigQuery の全体像とセットアップ

サーバーレス DWH の仕組みを掴み、サンドボックスで最初のクエリを打つ

この章で学ぶこと

前提: ハンズオン 1-1〜1-3 はサンドボックスで完走可(無料)。ハンズオン 1-4(予算アラート設定)のみ課金プロジェクト必須(アラート設定自体は無料、課金アカウントの有効化が前提)

BigQuery とは何か — サーバーレス DWH/レイクハウスの正体

BigQuery は Google Cloud が提供する、フルマネージドで AI 対応のデータプラットフォームです。serverless architecture を持つため、サーバーやクラスタのサイジング・容量計画を行わずに、SQL(GoogleSQL)や Python で数千億行規模のデータを分析できます。

「データウェアハウス」という呼び方が定着していますが、実態はロードしたデータだけでなく Cloud Storage 上のファイルまで SQL で横断できる「レイクハウス」に近づいています(外部データの扱いは第 10 章)。本書で繰り返し登場する現行の製品名を整理しておきます。

名称位置づけ
BigQuery Studioクエリエディタ・ノートブック・パイプラインを統合したコンソール(本章で詳しく歩きます)
BigQuery editionsStandard・Enterprise・Enterprise Plus の 3 段階。容量ベース(スロット時間)課金の土台(第 7 章)
Gemini in BigQuerySQL 生成やデータインサイトなどの AI 支援機能群(第 14 章)
BI Engineインメモリでダッシュボードクエリを高速化するサービス(第 8 章)
BigQuery DataFramespandas 互換の Python API(第 15 章)

アーキテクチャの核心 — ストレージとコンピュートの分離

BigQuery を理解する最初の鍵は、ストレージ層とコンピュート層の分離です。読み書きと分析クエリが同じリソースを奪い合いがちな従来型データベースと異なり、BigQuery はストレージとコンピュートを独立にスケールし、Google 社内のペタビット級ネットワークで両者を結びます(公式ドキュメント: 「separation of compute and storage layers lets each layer dynamically allocate resources」)。

コンピュート層(スロット) スロット スロット スロット スロット … ネットワーク越しに読み取り ストレージ層(カラムナ形式) 列 A 列 B 列 C …
図 1-1 ストレージ層は列指向でデータを保持し、コンピュート層のスロットはネットワーク越しに必要な列だけを読み取る。

ストレージ層はカラムナ(列指向)形式でデータを保持します。行ではなく列ごとにまとめて保存するため、分析クエリが特定の列だけをスキャンする場合に高い効率が出ます(SELECT * を避けるべき理由の 1 つです)。コンピュート層は「スロット」という仮想 CPU 単位で構成され、クエリはジョブ化されたのちステージに分割されて並列実行され、ステージ間の中間データは高速なシャッフルティアでやり取りされます。

クエリ投入 実行計画生成 スロットで並列実行 結果返却 ジョブ化 スロット割当 シャッフルで集約
図 1-2 クエリはジョブ化されてからスロットに割り当てられ、ステージ間をシャッフルでつなぎながら結果を返す。
実務の視点: この分離構造はそのままコスト構造に直結します。オンデマンド課金では、コンピュートの稼働時間ではなく「スキャンしたバイト数」に課金されるため、列を絞る・パーティションを切るといった工夫が直接コスト削減につながります(詳細は第 7 章)。「スキャン量 = コスト」という感覚を、第 1 章のうちに持っておいてください。

BigQuery Studio を歩く

BigQuery Studio は BigQuery のメインコンソールです。左側のペインに Explorer(テーブル・ビュー・ルーティンの操作とジョブ履歴の確認)、Classic Explorer、Files、Repository の各タブがあり、クエリを実行すると Explorer の Job history に履歴が残ります。BigQuery はクエリ・ロード・エクスポート・コピーのたびに自動でジョブを作成・実行するため、いつ何をしたかを後から追跡できます。

Explorer テーブル ジョブ履歴 クエリエディタ SELECT col FROM table ✓ 見積もり 12.3 MB Job history クエリ/ロード/コピー Query results station_name, num_trips 参照 記録 実行
図 1-3 Explorer のテーブルを参照しながらクエリエディタで実行すると、結果が Query results に、実行履歴が Job history に記録される。

クエリエディタでは対話的にクエリを実行でき、実行前に Edit > Query settings から宛先テーブル・ジョブの優先度(対話型かバッチか)・クエリキャッシュの利用可否・maximum bytes billed(課金される最大バイト数の上限)・実行ロケーションを設定できます。特に maximum bytes billed は、大きすぎるクエリを実行前に止める安全弁として第 7 章でも繰り返し使います。

サンドボックスと無料枠、dry run という習慣

BigQuery サンドボックスは、クレジットカード登録や課金アカウント作成なしで BigQuery を体験できるモードです。プロジェクト作成時に課金を有効化しなければ、自動的にサンドボックスとして扱われます。

サンドボックスの無料利用枠は BigQuery の無料枠と同一で、有効ストレージ月 10 GB・処理クエリデータ月 1 TB(2026-08 時点)です。加えて、サンドボックスには機能面の制限があります。

課金プロジェクトへの切り替えは、対象プロジェクトで課金を有効化し BigQuery editions を選ぶだけです。切り替え後は自動失効に頼らず、データセットの既定有効期限を見直すことが推奨されています。

サンドボックス クレジットカード不要 ストレージ 10 GB / 月 クエリ処理 1 TB / 月 60 日でリソース自動失効 DML・ストリーミング不可 課金プロジェクト 課金アカウント有効化が必要 無料枠超過分は従量課金 DML・ストリーミングが利用可 予算アラートで支出を監視 editions でスロット確保も可 移行
図 1-4 サンドボックスは無料枠のまま機能制限付きで使え、課金プロジェクトへ移行すると DML やストリーミングが使える代わりに従量課金と予算アラートの運用が必要になる。

課金プロジェクトのオンデマンドクエリ料金は月 1 TiB まで無料で、超過分は US ロケーションで1 TiB あたり 10.00 米ドル(2026-08 時点)です。ストレージも月 10 GiB まで無料で、以降 1 GiB 時間あたり 0.000031507 米ドル(US マルチリージョン)が加算されます。料金モデルの選び方は第 7 章で扱います。

課金を有効化したら、まず予算アラートを設定してください。Cloud Billing の予算はしきい値(既定で実績支出の 50%・90%・100%)に達すると請求管理者へ通知しますが、支出を自動的に止めるものではありません。停止まで含めた制御はカスタムクォータで行います(第 7 章)。

本書全体を通じて習慣化してほしいのが dry run です。クエリを実行せず検証だけ行う機能で、コンソールのクエリエディタでは有効なクエリに処理予定バイト数付きのチェックマークが、無効なクエリには感嘆符とエラーメッセージが自動表示されます。bq CLI では --dry_run フラグを付けます。

bq query \
  --use_legacy_sql=false \
  --dry_run \
  'SELECT
     start_station_name,
     COUNT(*) AS num_trips
   FROM
     `bigquery-public-data.new_york.citibike_trips`
   GROUP BY
     start_station_name'

クエリが妥当であれば、次の形式の応答が返ります。

Query successfully validated. Assuming the tables are not modified,
running this query will process N bytes of data.

N には処理予定バイト数が入ります。この値はスキャン対象列(ここでは start_station_name 列 1 本)の合計サイズで決まり、テーブルの現在の中身に応じて変わります。dry run は何度実行しても無料なので、「実行前に必ずこの値を見る」を習慣にしてください。

クエリを書く dry run 実行 許容範囲内か? 本実行 クエリを絞る 実行前に検証 処理バイト数を確認 Yes No クエリを見直す
図 1-5 dry run で処理バイト数を確認し、許容範囲でなければクエリを絞ってから再度 dry run にかける。
ハンズオン 1-1|BigQuery サンドボックスを有効化して BigQuery Studio を歩く

クレジットカードなしで BigQuery を使える状態にし、コンソールの基本操作を確認します。所要 5 分・無料(サンドボックス)。

  1. ブラウザで BigQuery コンソールを開き、Google アカウントで認証します。
  2. 国を選択して利用規約に同意し、新しいプロジェクトを作成します(課金を有効化しなければ自動的にサンドボックスになります)。
  3. 左側の Explorer から bigquery-public-data を検索し、new_york データセット配下の citibike_trips テーブルのスキーマを確認します。
  4. Explorer の Job history タブを開き、実行履歴が空であることを確認します(次のハンズオンで埋まります)。

クエリエディタと公開データセットにアクセスできる状態になれば完了です。

ハンズオン 1-2|公開データセットへ dry run 付きの最初のクエリを打つ

本書共通の演習用データセットを US ロケーションに作成し、公開データセットへの最初のクエリを dry run で確認してから実行します。所要 10 分・サンドボックスで可・無料枠内(処理量は手順内の dry run で実測します)。

  1. BigQuery Studio の Explorer でプロジェクトを選び、データセット ID handson_ch01、ロケーション US (multiple regions in United States) で演習用データセットを作成します。公開データセットは US マルチリージョンにあり、クエリは同じロケーションでしか実行できないため、本書は演習用データセットを一貫して US に作ります(理由は第 2 章)。
  2. NYC Citi Bike の乗車データから、出発ステーションごとの利用回数を集計するクエリをクエリエディタに入力します。列を絞り、SELECT * は使いません。
    SELECT
      start_station_name,
      COUNT(*) AS num_trips
    FROM
      `bigquery-public-data.new_york.citibike_trips`
    GROUP BY
      start_station_name
    ORDER BY
      num_trips DESC
    LIMIT 10;
  3. 実行する前に、クエリエディタに自動表示されるチェックマークと処理予定バイト数を確認します(dry run の自動表示)。
  4. Edit > Query settings で宛先テーブルを handson_ch01.top_stations に設定してから実行します。

結果には、利用回数が多い順に出発ステーション名トップ 10 が表示されます。Explorer で確認すると handson_ch01.top_stations テーブルも作成されているはずです。

後片付け: このデータセットはハンズオン 1-3 でも使うため、1-3 の末尾でまとめて削除します。

ハンズオン 1-3|Cloud Shell の bq CLI で同じ操作をコマンドから再現する

コンソールで作った演習用テーブルに対し、Cloud Shell から bq コマンドで dry run と実行を再現します。所要 10 分・サンドボックスで可・無料枠内。

  1. Cloud Shell を開き、プロジェクトを設定します。
    gcloud config set project PROJECT_ID
  2. 作成済みのリソースを確認します。
    bq ls handson_ch01
    bq show handson_ch01.top_stations

    bq show の出力で、テーブルのスキーマ・行数・保存バイト数を確認できます。

  3. 1-2 で作った top_stations テーブルに対する集計クエリを、まず --dry_run で検証します。
    bq query \
      --use_legacy_sql=false \
      --dry_run \
      'SELECT
         COUNT(*) AS num_popular_stations
       FROM
         `PROJECT_ID.handson_ch01.top_stations`
       WHERE
         num_trips > 1000'

    「Query successfully validated. Assuming the tables are not modified, running this query will process N bytes of data.」という応答で処理量を確認します。

  4. 問題なければ --dry_run を外して実行します。
    bq query \
      --use_legacy_sql=false \
      'SELECT
         COUNT(*) AS num_popular_stations
       FROM
         `PROJECT_ID.handson_ch01.top_stations`
       WHERE
         num_trips > 1000'

利用回数が 1,000 回を超えるステーション数が表示されれば成功です。今回実行したクエリジョブは Job history にも記録されています。

後片付け: ハンズオン 1-2・1-3 で作成した演習用データセットをまとめて削除します。

bq rm -r -f -d PROJECT_ID:handson_ch01
ハンズオン 1-4|課金プロジェクトで予算アラートを設定する

課金プロジェクトに切り替えた場合の必須設定です。所要 5 分・課金プロジェクト必須(アラート設定自体は無料)。

  1. 対象プロジェクトで課金を有効化します(コンソールの通知バナー、または請求関連のメニューから)。
  2. Cloud Billing コンソールで予算とアラートの管理画面を開き、新しい予算を作成します。
  3. 予算スコープとして対象プロジェクトを選び、予算額(例: 月 1,000 円)を指定します。
  4. しきい値ルールを確認します。既定では実績支出の 50%・90%・100% に達すると請求管理者へ通知が届く設定になっています。必要に応じて Pub/Sub 連携を追加すれば、しきい値超過時の自動処理も組めます。

保存すれば設定完了です。しきい値到達で通知メールが届きますが、予算アラートは支出を自動的に止めません。止めたい場合はカスタムクォータ(第 7 章)と組み合わせます。

後片付け: 学習用に一時的に作った予算は、Cloud Billing の予算とアラートの管理画面から削除しておきます。

つまずきポイント

公開データセットとロケーションが噛み合わない: bigquery-public-data は US マルチリージョンにあります。演習用データセットを US 以外(例: asia-northeast1)に作ると、同じクエリで参照できずエラーになります。本書は演習用データセットを常に US に統一します(理由は第 2 章)。
サンドボックスの 60 日失効に気づかない: サンドボックスのテーブル・ビュー・パーティションは、作成から 60 日で自動的に消えます。長期保存したいデータは課金プロジェクトに切り替え、データセットの有効期限設定を見直してください。
dry run の見積もりを絶対視しない: dry run は「Assuming the tables are not modified」という前提付きの見積もりです。実行までのテーブル変更やキャッシュの効き方で実際の課金は変わり得るため、大きなクエリでは maximum bytes billed も併用し安全弁を二重にしましょう。
予算アラートを「上限」だと誤解する: しきい値到達は通知が届くだけで、クエリやジョブは止まりません。「気づいたら予算超過」を防ぐには、通知の受信体制とカスタムクォータの併用が必要です。

理解度チェック

Q1. BigQuery がストレージ層とコンピュート層を分離している最大の利点は何ですか?

ストレージとコンピュートを独立にスケールできる点です。従来型データベースは読み書きと分析処理でリソースを共有しがちですが、BigQuery はネットワークで両層を結び、負荷に応じて別々に拡張します。

Q2. BigQuery サンドボックスで実行できない操作を 2 つ挙げてください。

DML(INSERT / UPDATE / DELETE / MERGE)の実行、ストリーミングデータの取り込み、BigQuery Data Transfer Service の利用のうち 2 つが該当します。

Q3. bq CLI で dry run を行うにはどのフラグを付けますか?また何がわかりますか?

--dry_run フラグです。クエリを実際には実行せず検証だけを行い、テーブルが変更されない前提で処理される見込みのバイト数を確認できます。

Q4. クエリの無料枠(オンデマンド課金)は月にどれだけ処理できますか?

月 1 TiB までの処理データが無料です(2026-08 時点)。それを超えた分は US ロケーションで 1 TiB あたり 10.00 米ドルが課金されます。

Q5.(シナリオ)社内で BigQuery を試したいが、クレジットカード登録の稟議に時間がかかる。想定クエリは公開データセットへの集計で、月間処理量は数百 MB 程度の見込み。最初の一歩として最も適切なのは?
A. 課金アカウントを先に作ってから始める B. クレジットカードなしでプロジェクトを作りサンドボックスとして使い始める C. BigQuery editions を購入してから試す D. ストリーミング取り込みで試験データを流し込む

B。 サンドボックスはクレジットカード不要で、月 1 TB のクエリ処理・月 10 GB のストレージの無料枠がそのまま使え、数百 MB 程度の検証には十分です。A は稟議待ちで本末転倒、C は小規模検証に過剰投資、D はサンドボックス非対応の機能です。

まとめと次章へ

次章では、この章で作った演習用データセットを土台に、リソースモデル(プロジェクト → データセット → テーブル)とロケーションの制約、GoogleSQL のデータ型を扱います。