
GoogleアナリティクスのデータをBigQueryにエクスポートし、自社データと連携させた高度な分析手法について解説します。スキーマの詳細から、データの連携方法、そして顧客行動の全体像を可視化するためのテクニックまで、実践的なアプローチをご紹介します。
GoogleアナリティクスをBigQueryにエクスポートして使う意義について
Google アナリティクス(GA4)は、多くのウェブサイトやアプリケーションで標準的に利用されている分析ツールです。しかし、GA4の標準インターフェースだけでは、より深いデータ分析や柔軟なデータ活用に制限があることも事実です。ここでBigQueryへのエクスポート機能が非常に重要になってきます。
Googleアナリティクス単体では分析の自由度が限られている
GA4の標準インターフェースは直感的で使いやすい反面、分析の自由度には制限があります:
UIでできることのみに限定されており、SQLのような柔軟なクエリ作成はできません
データの粒度や集計方法に制約があります
カスタム分析のオプションが限られています
例えば、「特定のドメインの特定のパスを閲覧したユーザーのみを抽出し、それらをカテゴリ別に分類する」といった細かい分析要件に対応することが難しい場合があります。
自社データとのJOINが自由に行える
BigQueryにエクスポートすることで、以下のメリットが得られます:
CRMデータ、取引データ、カスタマーサポートデータなど、社内の他のデータソースとGA4データを結合できます
ユーザーIDやカスタマーIDなどを使って、オンライン行動とオフライン行動を連携させた分析が可能になります
長期間にわたるユーザー行動の分析や、より詳細なセグメント分析が実現できます
外部BIツールの自由度の高いUIを使える
BigQueryにデータがあれば、さまざまなBIツールと連携して視覚化や分析が可能になります:
Tableau、Power BI、Looker Studio、Codatumなどの外部BIツールとの連携
カスタムダッシュボードの作成
自動化されたレポーティングシステムの構築
ユースケース
BigQueryにエクスポートされたGA4データを活用する具体的なメリットとユースケースを紹介します:
データ統合分析
: GA4だけでは分析できないサイト、アプリ、社内システムのデータを一箇所に統合して包括的な顧客行動を把握できます。
長期的なユーザー行動分析
: GA4のUIでは期間制限がありますが、BigQueryでは長期間にわたるユーザー行動履歴を保持・分析できます。
高度なセグメント分析
: BigQueryのSQLを活用することで、GA4のUIでは難しい複雑な条件でのユーザーセグメント抽出が可能になります。
統合ダッシュボードの構築
: 様々なBIツールと連携し、GA4データと社内データを統合した単一のダッシュボードを構築できます。
詳細なコンバージョン分析
: 複雑な購買パスや離脱ポイントを詳細に分析し、コンバージョン最適化に活用できます。
スキーマ
GA4からBigQueryにエクスポートされるデータはユニークなスキーマ構造を持っています。ここでは主にWebイベントに関連するスキーマについて解説します。
イベントの種類
GA4では様々なイベントが記録されますが、特に活用しやすい主要なイベントタイプを以下に紹介します:
page_view
: ユーザーがページを閲覧した際に発生するイベント
session_start
: ユーザーセッションの開始時に記録されるイベント
first_visit
: ユーザーの最初の訪問時に記録されるイベント
form_submit
: フォーム送信時に発生するイベント
user_engagement
: ユーザーがコンテンツと相互作用した際に記録されるイベント
主要なカラム
event_name
イベントの種類を示す文字列です。上記で説明したイベントタイプ(page_view, session_startなど)がここに格納されます。
event_date
イベントが発生した日付を示します。注意点として、このカラムはSTRING型で格納されています(YYYYMMDD形式)。日付として演算する場合は変換が必要です。
SELECT
PARSE_DATE("%Y%m%d", event_date) as event_date
FROM ...
event_timestamp
イベントが発生した正確な時刻をマイクロ秒単位で記録するINT64型の値です。
event_params
イベントに関連する詳細パラメータが格納される複雑な構造体です。このフィールドの構造は少し特殊で、以下のような構造になっています:
ARRAY<STRUCT<
key STRING,
value STRUCT<
string_value STRING,
int_value INT64,
float_value FLOAT64,
double_value FLOAT64
>
>
>
各パラメータはキーと値のペアで、値は型によって異なるフィールド(string_value, int_value等)に格納されます。この構造体の中に重要なプロパティが含まれているので、後続の「データの取り扱い方」で取り出し方について説明します。
user_pseudo_id
ユーザーを識別するための擬似的なID値です。このIDはデバイスやブラウザごとに生成され、クッキーベースの識別子として機能します。ユーザーがクッキーを削除したり、別のデバイスやブラウザを使用したりすると、新しいIDが生成されます。
user_id
サイトやアプリがユーザー認証を実装している場合に、明示的に設定された実際のユーザーIDです。こちらはクロスデバイスでも同一ユーザーを追跡できるため、より正確なユーザー分析が可能になります。また、社内の他のシステムとのデータ結合にも利用できます。
その他の重要カラム
device
: デバイスの種類、ブラウザ、オペレーティングシステムなどの情報
geo
: 国、地域、都市などの地理情報
traffic_source
: トラフィックの発生源情報
その他にも利用できそうなカラムはありますが、あまりドキュメント化されていないため、データを見つつ発見的に利用する必要があります。
こちらの公式Documentに全てではないですが、簡単な説明があります。
こちらのサイトは一部有料ですが、ある程度網羅的にSchemaの説明がされています。
データの取り扱い方・解析テクニック
GA4のBigQueryエクスポートデータは独特の構造を持っているため、効率的に分析するためのテクニックを紹介します。
TABLE_SUFFIXの使い方
GA4のデータは日付ごとに別々のテーブルに保存されます(events_20250401のような命名規則)。TABLE_SUFFIXを使用して特定の期間のデータを指定することでスキャン範囲が狭まり、クエリのパフォーマンスが向上します。常につけることを推奨します。
SELECT
*
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20201101' AND '20201201'
event_paramsのparsing
event_paramsフィールドは複雑な構造を持っています。頻繁に使用するパラメータは、サブクエリを使用して、keyでfilterする形で抽出しておくと便利です。
以下は非常によく使う `page_view` イベントにおけるlocation ` (イベント送信時のURL) を取り出したものです。
SELECT
(
SELECT
param.value.string_value,
FROM
UNNEST(event_params) AS param
WHERE
param.key = 'page_location'
)
AS page_location,
*
FROM
WHERE
event_name = 'page_view'
domain, pathのparsing
URL情報を分析するために、page_locationパラメータから各部分(ドメイン、パス、クエリパラメータなど)を正規表現を使って抽出できます。これにより、特定のURLパターンに基づいた詳細な分析が可能になります。
以下はpage_locationからdomain、path、query parameterを取り出したものです。また、pathはtree構造にしてtop directoryなどが重要な意味を持つ場合があるため、path_segmentsにpathを分割して配列で取り出しています。
SELECT
-- page info
REGEXP_EXTRACT(page_location, r'^https?://([^/]+)') AS domain,
REGEXP_EXTRACT(page_location, r'^https?://[^/]+(/[^?]*)') AS path,
REGEXP_EXTRACT(page_location, r'\?(.*)$') AS query_params,
SPLIT(SUBSTR(REGEXP_EXTRACT(page_location, r'^https?://[^/]+(/[^?]*)'), 2), '/') AS path_segments,
-- device info
device.category AS device_category,
device.operating_system AS device_os,
device.language AS device_language,
device.web_info.browser AS device_browser,
-- geo info
geo.continent AS geo_continent,
geo.country AS geo_country,
geo.region AS geo_region,
geo.city AS geo_city,
-- source info
traffic_source.medium AS source_medium,
traffic_source.source AS source_name,
*,
FROM
...
公式のサンプルコード (クエリクックブック)
Google提供の公式ドキュメントには、基本的なクエリ例が紹介されています。どの様なものがあるのか、簡単に紹介します。
基本的なクエリ
特定の期間のクエリ
: 特定日付範囲のデータを抽出するクエリ
ユーザー数と新規ユーザー数
: 総ユーザー数と新規ユーザー数を集計するクエリ
購入ユーザーあたりの平均トランザクション数
: 購入ユーザーの平均購入回数を算出するクエリ
特定のイベント名の値
: イベントタイプごとの発生頻度を集計するクエリ
カートに追加された上位10個のアイテム
: 人気商品をカート追加数で分析するクエリ
購入ユーザーのタイプ別の平均ページビュー数
: 購入者と非購入者のページ閲覧行動を比較するクエリ
高度なイベントクエリ
特定の商品を購入したユーザーによって購入された商品
: クロスセル分析のためのクエリ
各ユーザーのセッションあたりの平均購買額
: セッション単位の購買分析クエリ
ユーザーの最新のセッションIDとセッション番号
: 最新のユーザー行動を追跡するクエリ
ここでは個別のクエリについては触れませんが、基礎的なものと、Ecommerceのケースをメインで書いてあるようなので、興味のある方は確認してみてください。
実行結果と共にクエリを見ると、イメージが湧くと思うので、たとえば上記の 「特定の期間のクエリ」をCodatumで実行してみると以下のようになります。
基礎的な分析の例
基礎的なViewに関わるダッシュボード
ここまで説明したテクニック、サンプルコードを活用すると、次の様なシンプルなダッシュボードが作ることができます。
ECでの分析レポート & ダッシュボード
また、BigQueryの公式のサンプルデータセットを使ったECの分析ダッシュボードも、SQLや考え方と共にテンプレートにしてあります。こちらも確認してみてください。
高度な分析の例
ここからは、GA4のデータを活用した高度な分析手法について、具体的な例を交えて解説します。
自社データ(CRM等)との連携
GA4から取得したオンラインでのユーザー行動データと、社内に存在するCRMデータや販売管理システムのデータを連携させることで、より包括的な顧客理解が可能になります。
データ連携の基本的な考え方
GA4のデータと社内データを連携させるためには、共通のキーが必要です。多くの場合、以下のような方法で連携を行います:
GA4のuser_idと社内システムのcustomer_idを紐付ける
ログインしたユーザーに対して、社内システムでのユーザーIDをGA4のuser_idフィールドに設定します。データウェアハウスでの結合
BigQueryにエクスポートされたGA4データと、社内データを結合します。
模擬的なSQLの例:
-- GA4データと顧客マスタを結合する例
SELECT
ga.user_id,
crm.customer_id,
crm.customer_segment,
crm.membership_level,
ga.event_name,
ga.event_timestamp
FROM
`project_id.ga4_dataset.events_*` AS ga
JOIN
`project_id.crm_dataset.customer_master` AS crm
ON
ga.user_id = crm.web_user_id
WHERE
_TABLE_SUFFIX BETWEEN '20250301' AND '20250331'
AND ga.user_id IS NOT NULL
顧客属性データとの連携による詳細分析
CRMに格納されている顧客属性データとGA4データを連携させることで、ユーザー属性別の行動分析が可能になります。
-- 顧客セグメント別のサイト利用状況分析
SELECT
crm.customer_segment,
COUNT(DISTINCT ga.user_id) AS unique_users,
COUNT(*) AS total_events,
COUNT(CASE WHEN ga.event_name = 'page_view' THEN 1 END) AS pageviews,
COUNT(CASE WHEN ga.event_name = 'purchase' THEN 1 END) AS purchases,
SUM(CASE
WHEN ga.event_name = 'purchase' THEN (
SELECT param.value.double_value
FROM UNNEST(ga.event_params) AS param
WHERE param.key = 'value'
)
ELSE 0
END) AS total_revenue
FROM
`project_id.ga4_dataset.events_*` AS ga
JOIN
`project_id.crm_dataset.customer_master` AS crm
ON
ga.user_id = crm.web_user_id
WHERE
_TABLE_SUFFIX BETWEEN '20250301' AND '20250331'
GROUP BY
crm.customer_segment
ORDER BY
total_revenue DESC
このような連携により、GA4で計測されたオンライン行動データに、CRMに保存されている顧客属性情報(会員ランク、購入履歴、顧客セグメントなど)を紐付けて分析することが可能になります。
これによって、例えば「ゴールドメンバーのユーザーがもっとも閲覧しているページ」や「過去3ヶ月以内に購入したユーザーの直近のサイト行動パターン」など、より詳細で価値の高い分析が可能になります。
Googleアナリティクス UIとの数字の整合性についての注意点
GA4のUIで表示される数値とBigQueryのエクスポートデータから算出される数値には、しばしば相違が生じることがあります。
サンプリングや近似値の利用などによる数値の違いなどがあります。これらは念頭に置いておきましょう。
また、GoogleアナリティクスUIにおいて、自社で見ているデータとの違いなども気になることがありますが、その様な場合には、BigQueryエクスポートの詳細なデータとの比較は役に立つことがあります。
最後に
GoogleアナリティクスのデータをBigQueryにエクスポートすることで、Googleアナリティクス単体ではできなかったデータ分析、そしてデータ活用ができることをお伝えしました。
初期設定や学習コストはかかりますが、それを上回る価値が得られる可能性があります。特に、GA4で取得できるデータは自社サイトの表面的な一部部分であるケースは多く、GA4外の自社データと突合しなければ、本質的な意味でのコンバージョンすら計測できていないケースはあり得ます。
表面的な分析に頼ると間違ったデータによって、間違った意思決定を続けてしまうことにもなりかねません。
Codatumでは、GA4とBigQueryを活用した分析基盤の構築から、自社データとの連携、BIダッシュボードの開発まで、一貫したサポートを提供しています。データの力を最大限に引き出し、ビジネスの成長をサポートするパートナーとして、お気軽にご相談ください。