先輩にBigQueryの魅力を伝えてみた!
IT技術
はじめに
新田今回は、これまでWebやモバイルアプリケーション開発が主戦場でBigQueryには触れずに業務をしてきた先輩にBigQueryの魅力を伝えてみた記事です!
秋山さんの紹介記事はこちら↓
2019.04.02YOUは何しにライトコードへ?〜秋山さん編〜あのピエロのお店の店長代理からスタート!(株)ライトコードのメディア部です!現在は、ライトコードでバリバリに優秀なエン...
秋山経験者からの説明は助かります!
今日はよろしくお願いします!
サーバーレスでシンプルなのにパワフル
まず、BigQueryってサーバーレスなんですよ!
インスタンス立ち上げや管理を一切する必要がないです。
データさえ入れてしまえばすぐ使い始められます。
クエリを叩いたらBigQueryが処理してくれて結果を返してくれるという、エンジニアでなくても使えるくらいごくごくシンプルなサービスなんです。
それなのにとってもパワフルで、100億行のログテーブルの処理をしてもらったり、とても複雑な集計をしてもらったりすることもあります笑
せっかくなので使ってみてください!
今回は競馬の成績データのテーブルを準備したので、このクエリを叩いてみてください!
新潟1000mの枠成績を集計する
1WITH
2 win_counts AS (
3 SELECT
4 wakuban,
5 COUNT(CASE WHEN result = 1 THEN 1 END) AS win_count,
6 COUNT(CASE WHEN fukushou_result > 0 THEN 1 END) AS fukushou_win_count,
7 COUNT(1) AS race_count
8 FROM `playground.keiba_data`
9 WHERE
10 date >= "2010-01-01"
11 AND place_name = "新潟"
12 AND distance = 1000
13 AND track = "芝"
14 GROUP BY 1
15 )
16SELECT
17 wakuban,
18 win_count,
19 fukushou_win_count,
20 safe_divide(win_count, race_count) AS win_ratio,
21 safe_divide(fukushou_win_count, race_count) AS fukushou_win_ratio,
22FROM win_counts
23ORDER BY 1BigQueryはスプレッドシートに書き出したりDataStudioという無料のBIツールと接続したりJupyter Notebookからアクセスしたり他にもいろいろ連携できるんですが、
簡単なグラフを書くだけならクエリを書く場所(BigQuery Studio)でそのままできちゃいます
競馬ファンでは有名な話なんですが、新潟芝1000mの直線コースでは外枠の馬が大変有利、というのをグラフで表現しています。

秋山SQL叩いてすぐにグラフとかで見たり出来るのは便利ですなー
新田料金について
とっつきやすさと便利さはわかってもらえたと思うんですが、次に料金の話をしようかと思います。
安価な料金と無料枠
まず、ストレージ料金とクエリ料金があります。
ストレージ料金はテーブルに保存するデータに対してかかります、Google Cloud Storageのスタンダードクラスと同じような金額設定です。
(データ圧縮後の物理バイトに課金するという設定も可能です。詳しくはこちら↓)
2024.11.26BigQueryのストレージ課金モデルBigQueryデータセットのストレージ消費単位もともとは論理バイト単位で課金されていたのですが、2023年7月の料金...
クエリ料金は、今回はオンデマンド課金について説明しますね
クエリ実行前に下側に「〇〇GB処理されます」のような表示が出てると思うんですが、それがそのままコストになります。
USリージョンだと 6.25USD/1TB 、東京リージョンだと 7.5USD/1TB です。
先ほどのクエリの競馬16年分のデータでは29MBが処理されていたので、0.000029 TBですから、0.03円くらいとなります。
さらに毎月1TBの無料枠があります。
秋山さっきの競馬データくらいなら余裕で分析出来ますな。
毎週日曜にテレビ中継されてるくらいのレースに向けて対応も出来そう(笑)
新田料金の事故防止について
繰り返しになりますが、BigQueryのオンデマンド料金で基準になるのが読み取りバイト数なんです。
消費した計算資源の量ではないので少し直感と異なり、巨大なテーブルを select * from 〜 しちゃうとすぐに数十万となってしまうようなケースもあります。
割り当てでQuery usage per dayやQuery usage per day per userを設定しておくとそれを超えた場合エラーにできるので安心です。
BigQueryの便利機能
様々な連携や機能があるんですが、便利機能をすこし紹介します。
タイムトラベル
タイムトラベルは、過去のある時点のテーブルを対象に集計することができるんです。
たとえば、先ほどのテーブルの一部を消しちゃいます
1DELETE FROM `playground.keiba_data` WHERE date = "2026-04-26";そうするともちろん集計結果に出てこなくなるんですが、
1SELECT count(*)
2FROM `playground.keiba_data`
3FOR SYSTEM_TIME AS OF '2026-05-08 10:00:00 Asia/Tokyo'
4WHERE date = "2026-04-26"FOR SYSTEM_TIME AS OF で日時を指定するとその時点でのテーブルにクエリできるんです。
消したはずのレコードが結果に出てきます。
大きいプロジェクトでは上流のデータは別のチームが管理しているので、その検証やヒューマンエラーのリカバリーなどによくつかっています。
ちなみにテーブルごとに遡れる期間を設定できるんですが、デフォルトでは7日間です。
秋山テーブル管理って、ちゃんとしてないと後で地獄を見るし・・・(遠い目)
この辺は特に把握しておきたい内容ですね。
新田クエリ結果の会話分析
AI系の機能も少しずつ搭載されてきてます。
次のクエリを実行してみてください。コース別枠別成績を集計するクエリです。
1WITH
2 win_counts AS (
3 SELECT
4 place_name,
5 track,
6 distance,
7 wakuban,
8 COUNT(CASE WHEN result = 1 THEN 1 END) AS win_count,
9 COUNT(CASE WHEN fukushou_result > 0 THEN 1 END) AS fukushou_win_count,
10 COUNT(1) AS race_count
11 FROM `playground.keiba_data`
12 WHERE date >= "2010-01-01"
13 GROUP BY 1, 2, 3, 4
14 )
15SELECT
16 place_name,
17 track,
18 distance,
19 wakuban,
20 win_count,
21 fukushou_win_count,
22 race_count,
23 safe_divide(win_count, race_count) AS win_ratio,
24 safe_divide(fukushou_win_count, race_count) AS fukushou_win_ratio,
25FROM win_counts
26ORDER BY 1, 2, 3, 4クエリ結果のChatボタンを押してみてください
チャット形式で指示を出すと、クエリ結果に基づいてGeminiが分析してくれます。

簡単な可視化をしてくれたり、次にどのような分析をするかのサジェストを出してくれたりとなかなかリッチです。
秋山これなら初めて触る人でも手をつけやすそうですな。
慣れてる人でもAIを武器に分析強化出来そうなので有効活用していきたいですね。
新田AI関数
今度はSQLの中から生成AIを呼び出すようなイメージです。
先ほどとは別のサンプルテーブルを用意しています。
去年の有馬記念のコメント(独自に作成)が入ったテーブルです。
次のクエリを実行してみてください。
1SELECT
2 date,
3 umaban,
4 umaname,
5 comment,
6 AI.GENERATE(
7 CONCAT(
8 "競馬新聞用に4文字で表現してください。結果は4文字だけにしてください: ",
9 comment)).result AS output
10FROM `playground.race_comments`
11ORDER BY date DESC, umaban
このような処理は以前の発想だと、PythonからBigQuery実行して生成AIのAPI叩いて...のような流れで実装していましたが、もはやそんなことをしなくてもいいんですよね。
事前にモデルの作成などもせずこのまま利用できます。
ちなみにCloudStorageに画像をまとめてアップロードしてBigQueryで生成AIとともに仮想テーブルのように扱う、みたいなこともできますよ
このAI関数はウラではVertex AIを呼び出しており別途Agent Platformの料金が発生しますので少し注意です。
秋山便利過ぎて使うのが当たり前になっちゃいそうだけど、
別料金の可能性もある、とのことなのでそこは注意ですな。
翌月に使用料金見て絶望しないためにも・・・
新田複雑なクエリの中でAI関数を呼び出すと、誤って大量呼び出しとなってしまうことがありがちです。
そのようなことを避けるために、呼び出す対象のデータのテーブルを作ってからそれに対してAI関数を使うのがベストプラクティス、とも言われていました。
https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-generate-bool#best_practices
まとめ
今回は先輩にBigQueryの知見を教えてみました!
BigQueryはとっつきやすくパワフルで・安価・高機能 と魅力がたくさんあります!
毎月の無料枠も充実していますし是非使ってみてください!!
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!カジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
競馬が好きです。




