BigQueryでGA4データを扱う手順とは?初期設定から基本クエリまで解説【サンプルSQLつき】

Google アナリティクス 4(GA4)では、イベントベースのデータをBigQueryにエクスポートすることで、より自由度の高い分析が可能になります。
標準レポートでは見えないユーザー行動の深掘りや、カスタムダッシュボードへの展開にも役立つため、マーケティングやWeb改善に携わる方にとっては重要なスキルです。

本記事では、GA4とBigQueryの連携から、基本的なクエリの実行までの流れを、初心者にもわかりやすく丁寧に解説します。

なおBigQuery自体の初期設定については、下記のページが大変参考になります。
初心者でもわかるBigQuery入門|導入方法や使い方を徹底解説!(株式会社電算システム様)

1. ステップ 1:GA4とBigQueryの連携方法

1)GA4とBigQueryを連携する理由

GA4とBigQueryを連携することで、Google アナリティクスのデータを「生データのまま」取得し、自分の好きなように集計・分析できるようになります。
標準のレポートではできない、ユーザー行動の深掘りやページ単位でのカスタム指標作成などが可能になります。

2)連携手順(GA4管理画面)※図をクリックすると拡大します

  1. GA4の「管理」メニューを開く
  2. 「BigQueryのリンク」>「リンクを作成」を選択
  3. データをエクスポートしたいプロジェクト(Google Cloud Platform:GCP)を選び、連携設定を行う
    ※このプロジェクトは、BigQuery上にGA4のデータセット(events_*テーブル)が作成される保存先となります
  4. データのエクスポート頻度(日次/ストリーミング)を選択(※下図では日次を選択)

▼画像をクリックすると拡大します

3)エクスポート頻度の選び方:日次 vs ストリーミング

比較項目日次エクスポートストリーミングエクスポート
データ更新頻度1日1回まとめて送信数分ごとに即時で送信
メリット無料・安定・レポート作成向きリアルタイム分析が可能
デメリットリアルタイム性はない有料+構成がやや複雑
おすすめ初心者や定期レポートに最適広告運用・リアルタイム分析向け

4)無料枠の概要と目安

  • クエリ処理:1TB/月
  • ストレージ:10GB/月
  • 月間5〜10万PVであれば、3〜6か月分保存しても無料枠内に収まることが多い

2. ステップ 2:BigQueryで見るGA4データの構造

GA4ではイベント単位で行動が記録され、例えば「ページ閲覧」「スクロール」「クリック」などの行動が1行ずつ保存されます。

ところが「page location」などのイベントパラメータについては、下図のように各イベントの配下にネスト構造(=入れ子構造:下図参照)されているため、そのままではデータを引き出すことができません。
この後、ネストされたイベントパラメータの値を引き出す方法とサンプルSQLをご紹介します。

1)主なカラム

  • event_name:イベントの種類
  • event_timestamp:イベント発生時刻(マイクロ秒)
  • user_pseudo_id:ユーザー識別子
  • page_location:ページURL
  • event_params:イベント詳細(ネスト構造)

2)ネスト構造の展開(UNNEST関数)

ネストされているイベントパラメータの値を取り出すには、下記サンプルコードのように「UNNEST」関数で引っ張り出してやる必要があります。

SELECT ep.key, ep.value.string_value
FROM `project_id.dataset_id.events_*`, UNNEST(event_params) AS ep
WHERE ep.key = 'page_title'

本記事に掲載しているサンプルSQLスクリプトの使い方

サンプルSQLスクリプトを使用するためには、下図左から右の順番にGCPのBigQuery管理画面から「project_id」と「dataset_id」をコピーして、スクリプトの該当箇所に貼りつけてください。

▼画像をクリックすると拡大します。

3. ステップ 3:最初に実行する基本クエリ

このサンプルクエリは、BigQueryから日別のセッション数を抽出するものです。

SELECT
  DATE(TIMESTAMP_MICROS(event_timestamp)) AS date,
  COUNT(DISTINCT CAST(ep.value.int_value AS STRING)) AS sessions
FROM `project_id.dataset_id.events_*`,
UNNEST(event_params) AS ep
WHERE event_name = 'session_start'
  AND ep.key = 'ga_session_id'
GROUP BY date
ORDER BY date

4. BigQueryとGA4で数値がズレる?その理由と注意点

GA4画面上の数値には

  • サンプリング誤差
  • しきい値による誤差
  • ラストノンディレクトクリックアトリビューション(※)

などの要素が反映されるため、BigQueryで集計した数値とGA4画面の数値に差が出ることがあります。

※ラストノンディレクトクリックアトリビューションについての詳細と対策は下記をご参照ください:
ラストノンディレクトクリックアトリビューションをSQLで実装する手順【サンプルスクリプト付き】(サイトウオンライン)

1)よくあるズレの例

  • セッション数の差
  • メディア/ソースの内訳の違い
  • コンバージョン数の不一致

5. よくあるエラーとその対処法

  • クエリが重すぎる:SELECT * を避ける、期間を絞る
  • ネスト列の指定ミス:UNNEST() の使い方に注意
  • GA4からBigQueryへのデータ反映が遅い:初回反映に最大24時間かかることがある

6. おまけ:Looker StudioでのBigQueryデータのレポート化

BigQueryで集計したデータは、そのままだとわかりにくいものです。
チームやクライアントに共有するには、グラフや表にして見せる必要があります。

そこで便利なのが、Googleの無料ダッシュボードツール「Looker Studio(旧Data Portal)」です。

特におすすめしたいのが、「カスタムクエリ接続」を使った方法です。
これには以下のようなメリットがあります:

  • Googleアカウントさえあれば、データ接続のための追加認証が不要
  • SQLでまとめた結果だけをそのままグラフにできるため、Looker Studio側での細かい設定が減る
  • Looker Studioの「データ統合」機能を使えば、GA4とSearch Console(GSC)のデータも組み合わせ可能(※やや上級向け)

1)カスタムクエリ接続のやり方(簡易版)

  1. Looker Studioを開く
  2. 新しいデータソース →「BigQuery」を選択
  3. 「カスタムクエリで接続」を選び、SQLクエリを貼り付ける
  4. 名前をつけて保存 → グラフや表で利用

※注意:下図のプロジェクト名はSQLで使用する「プロジェクトID」ではないのでご注意ください

2)例:日別セッション数のクエリ(上記と同じものです)

-- ※以下の `project_id.dataset_id` の部分はご自身のBigQuery環境に合わせて変更してください。
-- 例:`my-project.analytics_123456789.events_*` のように指定します。

SELECT
  DATE(TIMESTAMP_MICROS(event_timestamp)) AS date,
  COUNT(DISTINCT CAST(ep.value.int_value AS STRING)) AS sessions
FROM `project_id.dataset_id.events_*`,
UNNEST(event_params) AS ep
WHERE event_name = 'session_start'
  AND ep.key = 'ga_session_id'
GROUP BY date
ORDER BY date

7. まとめ

GA4とBigQueryを連携すれば、より柔軟で詳細な分析が可能になります。
Looker Studioのカスタムクエリなどを使って、まずは「日次エクスポート」と「基本クエリ」から始めて、徐々に慣れていってください。

ChatGPTなどの生成AIにやりたいことと、Looker Studioのカスタムクエリで使うことを伝えると、かなり高い確率で、目的にあったSQLスクリプトを書いてくれます。
もしエラーが出た場合も、エラーコードやログなどをコピペして伝えると、修正版を作ってくれるので、楽しみながら諦めずにチャンジしてみてください。

関連:Search ConsoleのデータをBigQueryで分析する方法はこちら
Search ConsoleデータをBigQueryで分析する方法|サンプルSQLつき解説はこちら

8. 参考リンク集