GA4 BigQueryエクスポート活用ガイド|設定手順からSQLによる分析事例まで

BigQueryエクスポートの概要

GA4のBigQueryエクスポートは、GA4で収集したイベントデータをGoogle BigQueryにそのまま出力する機能です。GA4の管理画面では確認できないローデータ(生データ)をSQLで自由に分析できるようになります。

GA4の標準レポートや探索レポートでは、あらかじめ用意された指標やディメンションの組み合わせに限定されます。BigQueryにデータをエクスポートすれば、イベントパラメータの個別値まで掘り下げた独自の分析が可能です。

GA4 BigQueryエクスポートの全体像GA4イベントデータユーザープロパティeコマースデータ日次エクスポートevents_YYYYMMDD(無料)ストリーミングevents_intraday_YYYYMMDDBigQueryevents_YYYYMMDDネスト構造のカラムSQLで自由に分析無料プロパティ:日次エクスポートのみ(100万イベント/日の上限あり)Analytics 360:日次+ストリーミング対応、上限なしBQストレージ費用10GB無料枠ありBQクエリ費用1TB無料枠あり最適化手段パーティション / クラスタリング

無料のGA4プロパティでも日次エクスポートが利用できます。ストリーミングエクスポート(数分以内の準リアルタイム出力)はAnalytics 360(有料版)のみの機能です。日次エクスポートの場合、前日のデータが翌日に出力されます。

エクスポートの設定手順

BigQueryエクスポートの設定は、GA4の管理画面から数ステップで完了します。

事前準備

  1. Google Cloudプロジェクトを作成し、BigQuery APIを有効化する
  2. GA4プロパティの**「編集者」以上の権限**を持つアカウントでログインする
  3. 対象のGoogle CloudプロジェクトでBigQueryの**「ユーザー」ロール**を付与する

設定手順

  1. GA4の管理画面を開き、「プロダクトリンク」の中から「BigQueryのリンク」を選択する
  2. 「リンク」をクリックし、エクスポート先のGoogle Cloudプロジェクトを選択する
  3. データセットのリージョンを選択する(東京リージョンは「asia-northeast1」)
  4. エクスポートタイプを選択する(「毎日」が無料プロパティの選択肢)
  5. エクスポートするイベントを選択する(デフォルトは全イベント)
  6. 設定を確認して保存する

設定完了後、翌日からデータがBigQueryに出力されます。初回のテーブル生成には24時間ほどかかる場合があります。

テーブル構造を理解する

エクスポートされるテーブルの構造はGA4特有のネスト(入れ子)形式で、慣れるまで少し扱いにくいかもしれません。ここで基本的な構造を押さえておきましょう。

テーブル名の規則

日次エクスポートのテーブルは events_YYYYMMDD という命名規則です。たとえば2026年6月19日のデータは events_20260619 というテーブルに格納されます。

主要なカラム

カラム名内容
event_dateSTRINGイベント発生日(YYYYMMDD形式)
event_timestampINTEGERイベント発生のUNIXタイムスタンプ(マイクロ秒)
event_nameSTRINGイベント名(page_view, purchase等)
event_paramsRECORD(REPEATED)イベントパラメータのキーと値のペア
user_idSTRING設定したユーザーID
user_pseudo_idSTRINGGA4が自動付与するクライアントID
user_propertiesRECORD(REPEATED)ユーザープロパティのキーと値のペア
deviceRECORDデバイス情報(カテゴリ、OS、ブラウザ)
geoRECORD地理情報(国、地域、都市)
traffic_sourceRECORD初回流入元の情報

ネスト構造の扱い方

event_paramsuser_properties はネスト(REPEATED RECORD)構造です。1つのイベントに複数のパラメータが配列として格納されています。

特定のパラメータ値を取り出すには、UNNEST 関数を使ってネストを展開するか、サブクエリで抽出します。以下のSQLは page_location パラメータの値を取得する基本パターンです。

SELECT
  event_date,
  event_name,
  (SELECT value.string_value
   FROM UNNEST(event_params)
   WHERE key = 'page_location') AS page_location
FROM
  `project.dataset.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20260601' AND '20260630'

この (SELECT ... FROM UNNEST(...) WHERE key = '...') のパターンは、GA4のBigQueryデータを扱う上で最も頻繁に使う構文です。

基本的なSQL分析例

実務で使える代表的なSQLクエリを紹介します。

ページ別PV数の集計

SELECT
  (SELECT value.string_value
   FROM UNNEST(event_params)
   WHERE key = 'page_location') AS page_location,
  COUNT(*) AS page_views
FROM
  `project.dataset.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20260601' AND '20260630'
  AND event_name = 'page_view'
GROUP BY
  page_location
ORDER BY
  page_views DESC
LIMIT 20

セッション別のページ遷移(経路分析)

SELECT
  user_pseudo_id,
  (SELECT value.int_value
   FROM UNNEST(event_params)
   WHERE key = 'ga_session_id') AS session_id,
  event_timestamp,
  (SELECT value.string_value
   FROM UNNEST(event_params)
   WHERE key = 'page_title') AS page_title
FROM
  `project.dataset.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20260601' AND '20260630'
  AND event_name = 'page_view'
ORDER BY
  user_pseudo_id, session_id, event_timestamp

コンバージョンファネルの集計

WITH funnel AS (
  SELECT
    user_pseudo_id,
    MAX(IF(event_name = 'page_view', 1, 0)) AS step1_pageview,
    MAX(IF(event_name = 'add_to_cart', 1, 0)) AS step2_cart,
    MAX(IF(event_name = 'begin_checkout', 1, 0)) AS step3_checkout,
    MAX(IF(event_name = 'purchase', 1, 0)) AS step4_purchase
  FROM
    `project.dataset.events_*`
  WHERE
    _TABLE_SUFFIX BETWEEN '20260601' AND '20260630'
  GROUP BY
    user_pseudo_id
)
SELECT
  COUNT(*) AS total_users,
  SUM(step1_pageview) AS pageview_users,
  SUM(step2_cart) AS cart_users,
  SUM(step3_checkout) AS checkout_users,
  SUM(step4_purchase) AS purchase_users
FROM funnel

これらのクエリをベースに、自社のイベント名やパラメータに合わせてカスタマイズしてください。

広告運用での活用

BigQueryにエクスポートしたGA4データは、広告運用の分析にも活用できます。

UTMパラメータの分解分析

page_locationpage_referrer からUTMパラメータを抽出し、キャンペーン単位・メディア単位で流入後の行動を分析できます。GA4の標準レポートよりも細かい粒度での分析が可能です。

SELECT
  REGEXP_EXTRACT(
    (SELECT value.string_value FROM UNNEST(event_params)
     WHERE key = 'page_location'),
    r'utm_campaign=([^&]+)') AS campaign,
  COUNT(DISTINCT user_pseudo_id) AS users,
  COUNTIF(event_name = 'purchase') AS purchases
FROM
  `project.dataset.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20260601' AND '20260630'
GROUP BY campaign
HAVING campaign IS NOT NULL
ORDER BY users DESC

ランディングページ別の広告成果

セッションの最初のpage_viewイベントを特定し、ランディングページ別にCV数やエンゲージメント指標を集計できます。広告のリンク先URL別のパフォーマンス評価に役立ちます。

アトリビューション分析

GA4のアトリビューション情報もBigQueryにエクスポートされます。collected_traffic_source カラムを使えば、セッション単位の流入元を取得でき、独自のアトリビューションモデルを構築することも可能です。

費用と最適化

BigQueryのエクスポートデータは、ストレージとクエリの両方に費用が発生します。適切に管理すれば、多くのサイトでは無料枠内に収まります。

費用の目安

項目無料枠超過時の料金
ストレージ10GB/月約$0.02/GB/月
クエリ(オンデマンド)1TB/月$6.25/TB

月間100万PV程度のサイトであれば、日次エクスポートのストレージは月数GB程度です。クエリ費用も、日常的な分析であれば無料枠で十分カバーできるケースが多いです。

費用を抑えるテクニック

  • _TABLE_SUFFIX で日付範囲を絞る:ワイルドカードテーブル events_* を使う際に、WHERE _TABLE_SUFFIX BETWEEN '...' AND '...' でスキャン対象を限定する
  • SELECT * を避ける:必要なカラムだけを指定して、スキャン量を削減する
  • パーティション分割テーブルを活用する:エクスポートデータはデフォルトで日付パーティションが適用されている
  • クラスタリングキーを設定する:頻繁にフィルタするカラム(event_name等)でクラスタリングしたマートテーブルを作成する
  • クエリのドライランで事前にスキャン量を確認してから実行する

BigQueryのコンソールではクエリ実行前にスキャン量の見積もりが表示されます。想定外に大きなスキャンが発生していないか、実行前に確認する習慣をつけるとよいでしょう。

関連記事

SIGNALZ

SIGNALZ

運用型広告の実務経験をもとに、体系的なナレッジを発信しています。

この記事について感想やご質問を送れます

誤りの指摘、補足情報、ご質問など、お気軽にどうぞ。