BigQueryでデータ統合基盤を構築する費用|毎月の料金は何で決まり、どこで下げられるか
構築費は外注先の見積もり次第。毎月は運ぶツール・BigQuery・見せるツール・保守の4つ。東京の処理単価は1 TiB 7.50米ドル。600万行の架空データで、列とパーティションで処理量が減り、LIMITでは減らないと実測しました。
目次 クリックで開く
この記事の要点
- 構築の費用は外注先ごとの見積もり(人の工数)で決まり、この記事では相場の金額は扱いません。代わりに、毎月の料金のうち何が使った分で増え、何が定額かを、公式の料金と当社の実測で並べます。
- 作った後は、データを運ぶツール、BigQuery(保存と処理)、見せるツール、保守の人手の4つに毎月払います。BigQuery の処理は東京リージョンのオンデマンドで 1 TiB あたり 7.50 米ドル(毎月 1 TiB まで無料)です。
- 当社の検証用 BigQuery で 600万行の架空の表を試すと、読む列を絞ると処理量は約9分の1、日付で分けた表を日付の範囲で絞ると約34分の1になりました。LIMIT と、日付を関数で包んだ絞り込みでは減りませんでした。
データ統合基盤の毎月の費用と、料金が増えるもの
構築と保守は人の工数(外注先ごとの見積もり。この記事では金額を扱わない)
出典:Google Cloud「BigQuery の料金」、各社の公式の料金ページ(本文の表を参照)
BigQuery でデータ統合基盤を作る費用は、最初に作る費用と、作った後に毎月払い続ける費用に分かれます。最初の費用は外注先ごとの見積もり(人の工数)で決まるので、この記事では相場の金額は扱いません。代わりに、毎月の料金のうち何が使った分で増え、何が定額かを書きます。毎月の費用は、データを運ぶツール、BigQuery、見せるツール、保守の人手の4つです。このうち BigQuery の処理の料金は、同じデータでもクエリの書き方と表の作り方で桁が変わります。
当社は BigQuery を中心にしたデータ基盤の設計・構築と、データポータル(英語名 Data Studio、旧 Looker Studio)などでの可視化を支援している会社です。料金の仕組みは公式のページに書かれていますが、自分の表でどれだけ効くかは、実際にクエリを実行してみないと分かりません。そこで、設計で差が出る処理の料金は、当社の検証用の Google Cloud プロジェクトでクエリを実行して確かめました。単価は、読んだ量で払うオンデマンド料金の東京リージョン(asia-northeast1)の値です。容量課金(Editions)の試算と、構築の見積もりの金額は扱いません。
データを BigQuery のようなデータベースに置くか、Excel のままでよいかの分かれ目は、当社の動画で話しています。
毎月の費用は4つに分かれ、料金が増えるものが違う
| 層 | 役割 | 主なツール | 料金が増えるもの |
|---|---|---|---|
| 運ぶ(ETL/ELT) | SaaS・会計・広告などのデータを BigQuery へ定期的に取り込む | TROCCO、Fivetran、Airbyte | 処理時間、毎月更新された行数、クレジットなど(下の表) |
| 貯めて計算する(DWH) | データを保存し、SQL で集計・統合する | BigQuery | 保存した量と、クエリで読んだ量 |
| 整える(変換) | 生のデータを、売上や顧客数などの指標の表に組み直す | dbt | 有料版は開発者の席数。変換の SQL は BigQuery で動くので、その処理の料金は BigQuery にかかる |
| 見せる(BI) | ダッシュボード・レポート | データポータル、Tableau、Metabase | データポータルは無料。Pro は利用者数 |
| ツール | 公式の料金ページにある料金 | 何で増えるか |
|---|---|---|
| TROCCO | Free(処理時間 月2時間・1人)、Starter 月7.5万円、Essential 月15万円、Advanced 月30万円(税抜)、Professional は問い合わせ。基本コネクタは150種以上、Advanced 以上はすべてのコネクタ(約200種)とカスタムコネクタ | 処理時間の枠(月30/250/600時間)を超えると20時間単位で追加。Starter のカード払いを除き年間契約 |
| Fivetran | Free(毎月50万行まで)。Standard 以上は使った分。Standard で700以上のコネクタ | 毎月追加・更新された行の数(MAR)。毎月1〜100万行の標準のコネクションは1本5米ドルの基本料(Free プランにはかからない)。最初の全件の取り込みは数えない |
| Airbyte | クラウドの Standard は月20米ドルから(5クレジット込み、追加1クレジット5米ドル)、Plus は月189米ドルから。700以上のコネクタと、コネクタを作る Connector Builder がある。自分で動かす Airbyte Core もある | クレジット(データ源の種類で数え方が違う) |
| dbt | Developer は無料(1席)、Starter は1人月100米ドル | 開発者の席数と、モデルの実行回数 |
| カスタム開発 | コネクタが無いデータ源を、自作の取り込み(またはカスタムコネクタ)でつなぐ。費用は外注先の見積もりで決まる | 作る工数と、データ源の仕様が変わったときの直しの工数 |
| データポータル | 無料。Pro はプロジェクトごとに1人月9米ドル(月額は契約の期間で変わる) | Pro の利用者数 |
出典:TROCCO 料金プラン、Fivetran Pricing、Airbyte Pricing、dbt Pricing、Google Cloud「データポータル」。これらの料金は、構築を外注しても払い続けます。運ぶツールは料金の数え方が違うので、比べるときはデータ源ごとの行数と更新の頻度を先にそろえます。つなぎたいデータ源に、使うツールのコネクタがあるかも先に見ます。無ければカスタム開発になり、その分は構築の工数に入ります。外注と内製の分け方はETLパイプライン構築の費用で書いています。
BigQuery の料金は「保存」と「処理」
BigQuery には使う前に用意するサーバーがなく、料金はデータを置く保存の料金と、クエリでデータを読む処理の料金が中心です。東京リージョンの単価は次のとおりです。
| 項目 | 東京の単価(米ドル) | 無料枠・条件 |
|---|---|---|
| 処理(オンデマンド) | 1 TiB あたり 7.50 | 毎月 1 TiB まで無料。選んだ列の量で課金。参照する表ごと・クエリごとに最低 10 MB |
| 処理(容量課金・従量) | 1スロット時間あたり Standard 0.051、Enterprise 0.0765、Enterprise Plus 0.1275 | 1分を最小に秒単位で課金。1年・3年の確約の割引もある |
| 保存(論理) | 1 GiB 月あたり アクティブ 0.023、長期 0.016 | 毎月 10 GiB まで無料。90日続けて変更されない表・パーティションは自動で長期に |
| 保存(物理) | 1 GiB 月あたり アクティブ 0.052、長期 0.026 | 圧縮後の量で課金。タイムトラベルとフェイルセーフの分も課金 |
| 一括の読み込み | 無料 | 共有のスロットを使う場合 |
| ストリーミング挿入(Storage Write API の REST) | 200 MiB あたり 0.012 | 1行は最低 1 KB で計算 |
| Storage Write API(gRPC)/Storage Read API | 1 GiB あたり 0.03/1 TiB あたり 1.32 | 毎月 2 TiB/300 TiB まで無料 |
出典:Google Cloud「BigQuery の料金」。料金と無料枠は、プロジェクトにつないだ請求先アカウントにかかります。米ドル以外の通貨で払う場合は、Cloud Platform SKU に載っているその通貨の料金が使われます。リアルタイムの更新が要らないなら、共有のスロットを使う一括の読み込みにしておけば、取り込みは無料です。ストリーミングにすると、取り込みにも料金がかかります(gRPC の Storage Write API は毎月 2 TiB まで無料)。
保存の料金は表の量で読めます。読みにくいのは処理の料金で、同じ集計でも書き方で読む量が変わります。ここからは1つの表で確かめます。
600万行の架空の受注明細で試した
当社の検証用の Google Cloud プロジェクトのデータセット blog_demo に、SQL で架空の受注明細を作りました(2026年10月13〜14日、東京リージョン、オンデマンド)。お客様のデータではありません。
| 項目 | 中身 |
|---|---|
| 大きさ | 600万行。論理サイズ 873,331,772 バイト(約0.81 GiB) |
| 列 | order_id、order_date(2024年1月1日〜2026年9月30日の1,004日)、store_id(S001〜S050)、channel、product_id、customer_id、quantity、unit_price、amount、note |
| 同じ中身の3つの表 | sales_flat(分けていない)/sales_part(order_date で日単位のパーティション)/sales_part_clus(同じパーティション+store_id でクラスタ化) |
表を作るクエリは既存の表を読まないので、処理も課金も 0 バイトでした。処理量は主に「ドライラン」で見ました。クエリを実行せずに読む量だけを見積もる機能で、料金はかかりません(Google Cloud「クエリを実行する」)。一部は実行して、課金された量も確かめました。
読む列を減らすと処理量が減る。LIMIT では減らない
SELECT * FROM blog_demo.sales_flat LIMIT 10; -- 全部の列を10行だけ
SELECT order_date, amount FROM blog_demo.sales_flat; -- 2列だけ
選ぶ列と LIMIT を変えたときの処理量(ドライランの見積もり)
MB は100万バイト。表は sales_flat(分けていない表)
当社の検証用 Google Cloud プロジェクトで実測(2026年10月13〜14日、架空データ 600万行・約0.81 GiB、東京リージョン、オンデマンド)
10行しか返さない SELECT * … LIMIT 10 が、表全体の 873,331,772 バイトを読む見積もりでした。2列に絞ると 96,000,000 バイトで約9分の1、そこに LIMIT 10 を付けても同じです。BigQuery は列ごとにデータを持ち、オンデマンドは選んだ列の量で課金されます。LIMIT を付けても、課金される量は変わりません(料金ページ)。クラスタ化した表に限り、必要なブロックを読んだところで止まるので LIMIT で減ることがあります(Google Cloud「費用を管理するためのベストプラクティス」)。
中身を眺めるだけなら、コンソールの表の[プレビュー]タブか bq head が無料です(同じページ)。
期間で絞るならパーティション。ただし日付を関数で包むと全期間を読む
SELECT store_id, SUM(amount) AS sales FROM blog_demo.sales_part
WHERE order_date BETWEEN '2026-09-01' AND '2026-09-30' -- 日付の範囲で絞る
GROUP BY store_id;
-- WHERE FORMAT_DATE('%Y-%m', order_date) = '2026-09' -- 関数で包んで絞る
2026年9月の店舗別の集計の処理量(ドライランの見積もり)
正確には 132,000,000 バイトと 3,934,062 バイト
当社の検証用 Google Cloud プロジェクトで実測(2026年10月13〜14日、架空データ 600万行・約0.81 GiB、東京リージョン、オンデマンド)
パーティションの表では9月の30日分だけを読み、3,934,062 バイトで、分けていない表の約34分の1でした。ところが同じ表でも、日付を FORMAT_DATE で年月の文字列に変えてから絞ると、全期間の 132,000,000 バイトに戻りました。Google は、パーティションを読み飛ばす(プルーニング)には絞り込みに定数の式を使い、パーティションの列を計算に入れずに書くよう勧めています(Google Cloud「パーティション分割テーブルに対してクエリを実行する」)。月で絞るときも、日付の範囲で書きます。
ただし Google は、パーティション1つが約10 GB 未満と小さくなるなら、パーティションよりクラスタ化を検討するよう書いています。小さなパーティションが多いと表のメタデータが増えるためです(Google Cloud「パーティション分割テーブルの概要」)。今回の表は1日あたり1 MB に満たず、この目安よりずっと小さい表です。月単位のパーティションや、クラスタだけの表は試していません。
クラスタは見積もりに出ず、この表ではほとんど効かなかった
1か月に加えて1店舗(S007)に絞った日別の集計を、キャッシュを使わずに実行しました。
| パーティションの表 | パーティション+店舗でクラスタ | |
|---|---|---|
| ドライランの見積もり | 3,934,062 バイト | 3,934,062 バイト |
| 実行して処理した量 | 3,934,062 バイト | 3,884,584 バイト |
| 課金された量 | 10,485,760 バイト(10 MiB) | 10,485,760 バイト(10 MiB) |
| 実行時間 | 190ミリ秒 | 191ミリ秒 |
クラスタ化した表は実行したときだけ処理量が減り、それも約1%でした。Google の説明では、クラスタ化した表の費用は実行の後にしか分かりません。また、クラスタ化でメリットが得られる可能性があるのは 64 MB を超える表やパーティションで、それより小さいと性能の向上は通常ごくわずかです(Google Cloud「クラスタ化テーブルの概要」)。ドライランの見積もりは上限の値です(費用を管理するためのベストプラクティス)。1日分が1 MB に満たない今回の表では、処理量もほとんど減りませんでした。効きは実行後の処理量で比べます。
小さなクエリは、最低 10 MB で課金される
1回のクエリで、処理した量と課金された量
当社の検証用 Google Cloud プロジェクトで実測(2026年10月13〜14日、架空データ 600万行・約0.81 GiB、東京リージョン、オンデマンド)。最低額の決まりは Google Cloud「BigQuery の料金」
上の実行で読んだのは約3.9 MB でしたが、課金はどちらも 10 MiB でした。オンデマンドは MB 単位で切り上げ、参照する表ごとに最低 10 MB、クエリごとにも最低 10 MB かかります(料金ページ)。公式の表記は 10 MB ですが、今回実際に課金されたのは 10,485,760 バイト(10 MiB)でした。計算の例として、1つの表を読む小さなクエリを1,000回実行すれば、読んだ量に関係なく、少なくとも約9.8 GiB(10 MiB×1,000回)分が課金されます。同じ集計を何度も実行するなら、次のキャッシュか、集計済みの小さな表で回数を減らせます。
読みすぎるクエリは、実行前に止める
誰かが分けていない大きな表に SELECT * を書けば、表全体を読みます。そうしたクエリを実行前に失敗させる設定を2つ試しました。
課金される最大バイト数
上限を 10 MiB にして SELECT * FROM sales_flat LIMIT 10 を実行すると、実行前に次のエラーで止まり、課金は 0 でした。
Query exceeded limit for bytes billed: 10485760. 873463808 or higher required.
コンソールではクエリエディタの[展開]→[クエリ設定]→[詳細オプション]の[課金される最大バイト数]、bq コマンドでは --maximum_bytes_billed、API では maximumBytesBilled で設定します。クラスタ化した表は見積もりが上限の値なので、実際の課金が上限に収まる場合でも失敗することがあります(費用を管理するためのベストプラクティス)。
パーティションの絞り込みを必須にする
パーティションの表 sales_part に、パーティションの列で絞らないクエリを受け付けない設定(require_partition_filter)を入れました。当社は API(tables.patch)で設定しました。SQL で入れるなら次のとおりです。
ALTER TABLE blog_demo.sales_part
SET OPTIONS (require_partition_filter = TRUE);
設定を入れた表に、WHERE を付けずに集計をかけると、ドライランの段階で次のエラーになりました(プロジェクト名は伏せています)。order_date の範囲を付けると通り、見積もりは 3,934,062 バイトでした。
Cannot query over table ‘<project>.blog_demo.sales_part’ without a filter over column(s) ‘order_date’ that can be used for partition elimination
作った後の表には、コンソールの表の編集画面からはこの設定を入れられません。クエリエディタで ALTER TABLE を実行するか、bq update --require_partition_filter か API(tables.patch)を使います(Google Cloud「パーティション分割テーブルを管理する」)。試していませんが、1日に読める量の上限(カスタムの割り当て)も、プロジェクト全体と、利用者1人あたり(全員に同じ値)で決められます。プロジェクトの既定は1日 200 TiB です。割り当ては厳密な上限ではなく、超えて処理されることがあります(Google Cloud「カスタム費用管理を作成する」)。
同じクエリの2回目は、キャッシュで課金されなかった
1店舗×1か月の集計を、キャッシュを使う設定で2回続けて実行すると、1回目は 10 MiB の課金、2回目はキャッシュに当たって処理も課金も 0 でした。BigQuery は結果を通常24時間ほど一時的な表に残し、まったく同じクエリにはそこから結果を返します。その分は課金しません。ただし、クエリの文字が空白1つでも違う、参照する表が変更された、CURRENT_DATE のように実行のたびに値が変わる関数を使っている、行レベルのセキュリティがかかった表を読む、といった場合は使われません(Google Cloud「キャッシュに保存されたクエリ結果を使用する」)。
表が変わるたびにキャッシュは使えなくなるので、取り込みの頻度は BigQuery の処理の料金にも響きます。キャッシュを使わない実行は、コンソールの[キャッシュの設定]で[キャッシュに保存された結果を使用]をオフにします。
このデモ全体で課金されたのは 30 MiB だった
このデモでラベルを付けたクエリのジョブで、処理した量と課金された量
課金は最低 10 MiB のクエリ3回分。キャッシュに当たったのは1本
当社の検証用 Google Cloud プロジェクトで実測(2026年10月13〜14日、架空データ 600万行・約0.81 GiB、東京リージョン、オンデマンド)。INFORMATION_SCHEMA.JOBS_BY_USER で集計
試したクエリにラベルを付け、INFORMATION_SCHEMA.JOBS_BY_USER(自分のジョブの記録)で集計しました。処理した量は 11,703,230 バイト、課金は 30 MiB で、どちらも1店舗×1か月の集計を実行した3回分(キャッシュなしの2回と、キャッシュを使う設定の1回目)の合計と一致します。上限で止まったクエリと、キャッシュに当たったクエリは課金 0 でした。ドライランは実行されないので、この集計には入っていません。東京の単価で換算すると約0.0002米ドルです。これは無料枠を差し引く前の値です。請求は請求先アカウント全体で決まるため、このデモだけの請求額は確かめていません。
同じ見方は自社の基盤でも使えます。INFORMATION_SCHEMA.JOBS には過去180日分のジョブが残り、total_bytes_billed(課金された量)と total_slot_ms(使ったスロットの時間)を見られます(Google Cloud「JOBS ビュー」)。課金量の多いクエリを並べれば、直すと効く所が分かります。オンデマンドのままか容量課金に移るかも、目安として、月の total_bytes_billed×TiB の単価と、total_slot_ms から出したスロット時間×容量課金の単価を比べます。分かれ目はクエリの量と実行のされ方で変わるので、金額は書きません(容量課金は試していません)。
処理の料金は、ツールの月額と比べてどれくらいか
このデモの処理の料金は約0.0002米ドルでした。毎月の費用の中でどれくらいの大きさかを見るために、本文に出したツールの月額を、東京のオンデマンドの単価(1 TiB あたり 7.50 米ドル)で処理の量に直しました(当社の計算)。
| 費目 | 公式の値・実測 | 処理の量に直すと |
|---|---|---|
| このデモで課金された処理 | 30 MiB、約0.0002米ドル | — |
| 今回の表(873,331,772 バイト)を SELECT * で丸ごと1回読む | 約0.006米ドル | — |
| 処理の無料枠(請求先アカウントごと) | 毎月 1 TiB | 今回の表を丸ごと読んで約1,259回分 |
| Fivetran の標準コネクション1本の基本料 | 月5米ドル | 約0.67 TiB(丸ごと約839回分) |
| データポータル Pro 1人 | 月9米ドル | 1.2 TiB |
| dbt Starter 1人 | 月100米ドル | 約13.3 TiB(丸ごと約1万6,800回分) |
| TROCCO Starter | 月7.5万円(税抜) | 円建てなので換算しない |
今回くらいの大きさの表なら、処理の料金は毎月の無料枠の 1 TiB に収まりやすく、毎月の費用で大きいのは、有料のプランを選んだ運ぶ・整える・見せるツールの月額のほうです。処理の料金が効いてくるのは、読む量が月に TiB の単位になるとき、つまり表が大きいか、大きな表を丸ごと読むクエリを何度も実行するときです。表の分け方は、パーティションとクラスタで分けて考えます。パーティションは、1日1 MB に満たない小さな表でも読む量を約34分の1に減らせました。ただし公式は、パーティション1つが約10 GB 未満になるなら、メタデータが増えるのでクラスタ化も検討するよう書いています。クラスタは、公式の目安の 64 MB より小さい今回の表では約1%しか減りませんでした。どちらにしても、読む量が月に TiB に届かないうちは、金額の差は小さいままです(今回の表を丸ごと読んでも1回約0.006米ドル)。その間に入れておく意味が大きいのは、「読みすぎるクエリは、実行前に止める」の節の上限や必須化のように、大きな表を誤って丸ごと読むクエリを止める設定です。
保存の料金を抑える仕組み(今回は試していない)
| 仕組み | 何が起きるか | 気をつけること |
|---|---|---|
| 長期保存 | 90日続けて変更されない表・パーティションは自動で長期の単価に(東京の論理で 0.023→0.016 米ドル) | パーティションに分けた表はパーティションごとに判定。分けていない表は表全体が90日変更されていない場合だけ |
| 物理ストレージの課金 | データセットごとに、圧縮後の量で払う方式に切り替えられる | 単価は論理より高い(東京のアクティブで 0.052 対 0.023)。反映に24時間、もう一度変えるには14日待つ |
| パーティション・表の有効期限 | 期限を過ぎたパーティションや結果の表を自動で消す | 消えたデータは読めなくなる。データセットに既定の期限も決められる |
出典:Google Cloud「BigQuery の料金」、「クラスタ化テーブルの概要」、「データセットのプロパティを更新する」、「パーティション分割テーブルを管理する」、「費用を管理するためのベストプラクティス」。アクティブの単価だけで比べると、物理の課金が得になるのは、圧縮後の量が論理の量の約44%(0.023÷0.052)を下回るときです(当社の計算。タイムトラベルなどの分は含まない)。
発注の前に、見積もりの前提として確かめること
構築の工数の見積もりは外注先ごとに違うので、金額は扱いません。ここでは、毎月の料金が何で動くか(使った分で増えるのか、定額か)という点から、見積もりの前提として確かめておきたい項目を並べます。
| 確かめること | 理由(料金の仕組み) |
|---|---|
| つなぐデータ源ごとの行数と、更新の頻度 | Fivetran は毎月追加・更新された行の数、TROCCO は処理時間の枠を超えた分で料金が増える。表が変わるたびに BigQuery のキャッシュも使えなくなる |
| つなぐデータ源に、使う ETL ツールのコネクタがあるか | 無ければカスタム開発になり、構築の工数に入る。TROCCO のカスタムコネクタは Advanced 以上 |
| ストリーミングが要るか、日次の一括の読み込みで足りるか | 一括の読み込みは無料。ストリーミングは取り込みに課金(gRPC の Storage Write API は毎月 2 TiB まで無料) |
| ダッシュボードを見る人の数と、Pro が要るか | データポータルは無料、Pro は1人ごとの月額 |
| 大きくなる表を、どの列でパーティション・クラスタに分けるか | 処理の料金は読んだ量で決まる。クラスタは効く大きさの目安(64 MB)があり、パーティションは1つ約10 GB 未満ならクラスタ化も検討する |
| 課金の上限、パーティションの絞り込みの必須化、1日の割り当てを入れるか | 読みすぎるクエリを実行前に止められる |
| 行・列のセキュリティを使うか | 行レベルのセキュリティの表ではキャッシュが使われない |
| 毎月、JOBS で課金量を見る手順を誰が持つか | 処理の料金は使い方で変わり、課金された量はジョブの記録で確かめられる |
変換の層の費用はdbt × BigQuery の変換基盤の構築費用、見せる層はデータポータル(旧 Looker Studio)の設定・外注費用、遅いクエリの直し方はBigQuery のクエリの最適化に書いています。
まず、今あるクエリの処理量を見る
すでに BigQuery を使っているなら、よく実行されているクエリをドライランにかけて読む量を見て、INFORMATION_SCHEMA.JOBS で課金量の多いクエリを並べてください。SELECT *、日付を関数で包んだ絞り込み、パーティションの無い大きな表への期間の絞り込みが見つかれば、そこが直す候補です。これから作るなら、見積もりの前提に上の表の項目が入っているかを確かめてください。表の分け方や上限の設定を含めた基盤の設計は、当社のデータ分析・BI支援でご相談いただけます。
単価と仕様は、2026年10月14日に Google Cloud の料金ページ・ドキュメントと各社の料金ページで確かめたものです。デモの数字は当社の検証用プロジェクトの、この表・この条件での値で、ほかの表で同じ比率になるとは限りません。
データ分析・データ基盤支援
Snowflake・BigQuery・Treasure Dataといったデータ基盤の選定から、基幹・SaaS・広告・POSに散らばったデータの集約、dbtでの指標統一、Lookerなどでのダッシュボード化までを支援します。
