• トップ
  • ブログ一覧
  • 先輩にBigQueryの魅力を伝えてみた!
  • 先輩にBigQueryの魅力を伝えてみた!

    新田(エンジニア)新田(エンジニア)
    2026.05.26

    IT技術

    はじめに

    新田新田
    こんにちは、分析基盤や分析のお仕事をやっている新田です。
    今回は、これまでWebやモバイルアプリケーション開発が主戦場でBigQueryには触れずに業務をしてきた先輩にBigQueryの魅力を伝えてみた記事です!
    秋山さんの紹介記事はこちら↓

    featureImg2019.04.02YOUは何しにライトコードへ?〜秋山さん編〜あのピエロのお店の店長代理からスタート!(株)ライトコードのメディア部です!現在は、ライトコードでバリバリに優秀なエン...

    秋山秋山
    BigQueryという単語はよく聞きますが、今までの作業範囲的にあまり触れる機会が無く・・・
    経験者からの説明は助かります!
    今日はよろしくお願いします!

    サーバーレスでシンプルなのにパワフル

    まず、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 1

    BigQueryはスプレッドシートに書き出したりDataStudioという無料のBIツールと接続したりJupyter Notebookからアクセスしたり他にもいろいろ連携できるんですが、
    簡単なグラフを書くだけならクエリを書く場所(BigQuery Studio)でそのままできちゃいます
    競馬ファンでは有名な話なんですが、新潟芝1000mの直線コースでは外枠の馬が大変有利、というのをグラフで表現しています。

    秋山秋山
    イメージしやすいサンプルデータでの紹介ありがとうございます(笑)
    SQL叩いてすぐにグラフとかで見たり出来るのは便利ですなー
    新田新田
    サクッとここまで出来ちゃうんですよ〜

    料金について

    とっつきやすさと便利さはわかってもらえたと思うんですが、次に料金の話をしようかと思います。

    安価な料金と無料枠

    まず、ストレージ料金とクエリ料金があります。
    ストレージ料金はテーブルに保存するデータに対してかかります、Google Cloud Storageのスタンダードクラスと同じような金額設定です。
    (データ圧縮後の物理バイトに課金するという設定も可能です。詳しくはこちら↓)
    featureImg2024.11.26BigQueryのストレージ課金モデルBigQueryデータセットのストレージ消費単位もともとは論理バイト単位で課金されていたのですが、2023年7月の料金...

    クエリ料金は、今回はオンデマンド課金について説明しますね
    クエリ実行前に下側に「〇〇GB処理されます」のような表示が出てると思うんですが、それがそのままコストになります。
    USリージョンだと 6.25USD/1TB 、東京リージョンだと 7.5USD/1TB です。
    先ほどのクエリの競馬16年分のデータでは29MBが処理されていたので、0.000029 TBですから、0.03円くらいとなります。
    さらに毎月1TBの無料枠があります。

    秋山秋山
    毎月1TBの無料枠は凄い・・・!
    さっきの競馬データくらいなら余裕で分析出来ますな。
    毎週日曜にテレビ中継されてるくらいのレースに向けて対応も出来そう(笑)
    新田新田
    「ビッグデータというほどでもないのでBigQueryに入れるような状態じゃない……」という話を聞いたことがありますが、とりあえず入れてみると無料枠だけでも色々できるようになります

    料金の事故防止について

    繰り返しになりますが、BigQueryのオンデマンド料金で基準になるのが読み取りバイト数なんです。
    消費した計算資源の量ではないので少し直感と異なり、巨大なテーブルを select * from 〜 しちゃうとすぐに数十万となってしまうようなケースもあります。
    割り当てでQuery usage per dayQuery 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を武器に分析強化出来そうなので有効活用していきたいですね。
    新田新田
    とっつきやすいと思いますよ!

    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にする質問をそのまま書けるのは便利ですねー。
    便利過ぎて使うのが当たり前になっちゃいそうだけど、
    別料金の可能性もある、とのことなのでそこは注意ですな。
    翌月に使用料金見て絶望しないためにも・・・
    新田新田
    巨大なテーブルに対して使うとそれだけ大量のAPIリクエストをするようなものなので料金はきちんと意識したほうがよさそうです。
    複雑なクエリの中でAI関数を呼び出すと、誤って大量呼び出しとなってしまうことがありがちです。
    そのようなことを避けるために、呼び出す対象のデータのテーブルを作ってからそれに対してAI関数を使うのがベストプラクティス、とも言われていました。
    https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-ai-generate-bool#best_practices

    まとめ

    今回は先輩にBigQueryの知見を教えてみました!
    BigQueryはとっつきやすくパワフルで・安価・高機能 と魅力がたくさんあります!
    毎月の無料枠も充実していますし是非使ってみてください!!

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!カジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background