新田:こんにちは、分析基盤や分析のお仕事をやっている新田です。今回は、これまでWebやモバイルアプリケーション開発が主戦場でBigQueryには触れずに業務をしてきた先輩にBigQueryの魅力を伝えてみた記事です!
秋山:BigQueryという単語はよく聞きますが、今までの作業範囲的にあまり触れる機会が無く・・・。経験者からの説明は助かります!今日はよろしくお願いします!
サーバーレスでシンプルなのにパワフル
まず、BigQueryってサーバーレスなんですよ!
インスタンス立ち上げや管理を一切する必要がないです。
データさえ入れてしまえばすぐ使い始められます。
クエリを叩いたらBigQueryが処理してくれて結果を返してくれるという、エンジニアでなくても使えるくらいごくごくシンプルなサービスなんです。
それなのにとってもパワフルで、100億行のログテーブルの処理をしてもらったり、とても複雑な集計をしてもらったりすることもあります笑
せっかくなので使ってみてください!
今回は競馬の成績データのテーブルを準備したので、このクエリを叩いてみてください!
新潟1000mの枠成績を集計する
WITH
win_counts AS (
SELECT
wakuban,
COUNT(CASE WHEN result = 1 THEN 1 END) AS win_count,
COUNT(CASE WHEN fukushou_result > 0 THEN 1 END) AS fukushou_win_count,
COUNT(1) AS race_count
FROM `playground.keiba_data`
WHERE
date >= "2010-01-01"
AND place_name = "新潟"
AND distance = 1000
AND track = "芝"
GROUP BY 1
)
SELECT
wakuban,
win_count,
fukushou_win_count,
safe_divide(win_count, race_count) AS win_ratio,
safe_divide(fukushou_win_count, race_count) AS fukushou_win_ratio,
FROM win_counts
ORDER BY 1BigQueryはスプレッドシートに書き出したりDataStudioという無料のBIツールと接続したりJupyter Notebookからアクセスしたり他にもいろいろ連携できるんですが、
簡単なグラフを書くだけならクエリを書く場所(BigQuery Studio)でそのままできちゃいます
競馬ファンでは有名な話なんですが、新潟芝1000mの直線コースでは外枠の馬が大変有利、というのをグラフで表現しています。
秋山:イメージしやすいサンプルデータでの紹介ありがとうございます(笑)
SQL叩いてすぐにグラフとかで見たり出来るのは便利ですなー
新田:サクッとここまで出来ちゃうんですよ〜
料金について
とっつきやすさと便利さはわかってもらえたと思うんですが、次に料金の話をしようかと思います。
安価な料金と無料枠
まず、ストレージ料金とクエリ料金があります。
ストレージ料金はテーブルに保存するデータに対してかかります、Google Cloud Storageのスタンダードクラスと同じような金額設定です。
(データ圧縮後の物理バイトに課金するという設定も可能です。)
クエリ料金は、今回はオンデマンド課金について説明しますね
クエリ実行前に下側に「〇〇GB処理されます」のような表示が出てると思うんですが、それがそのままコストになります。
USリージョンだと 6.25USD/1TB 、東京リージョンだと 7.5USD/1TB です。
先ほどのクエリの競馬16年分のデータでは29MBが処理されていたので、0.000029 TBですから、0.03円くらいとなります。
さらに毎月1TBの無料枠があります。
秋山:毎月1TBの無料枠は凄い・・・!さっきの競馬データくらいなら余裕で分析出来ますな。毎週日曜にテレビ中継されてるくらいのレースに向けて対応も出来そう(笑)
新田:「ビッグデータというほどでもないのでBigQueryに入れるような状態じゃない……」という話を聞いたことがありますが、とりあえず入れてみると無料枠だけでも色々できるようになります
料金の事故防止について
繰り返しになりますが、BigQueryのオンデマンド料金で基準になるのが読み取りバイト数なんです。
消費した計算資源の量ではないので少し直感と異なり、巨大なテーブルを select * from 〜 しちゃうとすぐに数十万となってしまうようなケースもあります。
割り当てでQuery usage per dayやQuery usage per day per userを設定しておくとそれを超えた場合エラーにできるので安心です。
BigQueryの便利機能
様々な連携や機能があるんですが、便利機能をすこし紹介します。
タイムトラベル
タイムトラベルは、過去のある時点のテーブルを対象に集計することができるんです。
たとえば、先ほどのテーブルの一部を消しちゃいます
DELETE FROM `playground.keiba_data` WHERE date = "2026-04-26";そうするともちろん集計結果に出てこなくなるんですが、
SELECT count(*)
FROM `playground.keiba_data`
FOR SYSTEM_TIME AS OF '2026-05-08 10:00:00 Asia/Tokyo'
WHERE date = "2026-04-26"FOR SYSTEM_TIME AS OF で日時を指定するとその時点でのテーブルにクエリできるんです。
消したはずのレコードが結果に出てきます。
大きいプロジェクトでは上流のデータは別のチームが管理しているので、その検証やヒューマンエラーのリカバリーなどによくつかっています。
ちなみにテーブルごとに遡れる期間を設定できるんですが、デフォルトでは7日間です。
秋山:データ分析するのに過去の状況遡れるのは助かりますねー。テーブル管理って、ちゃんとしてないと後で地獄を見るし・・・(遠い目)この辺は特に把握しておきたい内容ですね。
新田:「しまった!さっきの状態に戻りたい!」という時もなんとかしてくれる頼もしい機能です。
クエリ結果の会話分析
AI系の機能も少しずつ搭載されてきてます。
次のクエリを実行してみてください。コース別枠別成績を集計するクエリです。
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/55320
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「データエンジニア」「ゲームエンジニア」「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】をのぞいてみてください。