10.4 GA4 のエクスポート スキーマ

BigQuery に出力されたテーブルの構造を理解します。
応用書籍換算 約 10 ページ

この章で学ぶこと

  • BigQuery に出力される GA4 のテーブルの種類
  • イベントのパラメータ(event_params)が入っている形
  • ユーザー プロパティ(user_properties)と商品(items)の形
  • 日付とタイムゾーンの扱い

テーブルの種類

GA4 の BigQuery エクスポートでは、データセット analytics_<プロパティ ID> の中に、次のようなテーブルが作られます。

テーブル内容作られる条件
events_YYYYMMDD1 日分のイベントのデータ(確定)毎日のエクスポート
events_intraday_YYYYMMDD当日のイベントのデータ(ほぼリアルタイム。日次のテーブルができると削除される)ストリーミングのエクスポート
pseudonymous_users_YYYYMMDDCookie などの仮名の ID 単位のユーザーのデータユーザーデータのエクスポート
users_YYYYMMDDUser-ID 単位のユーザーのデータユーザーデータのエクスポート(User-ID を使っている場合)

この章では、最もよく使う events_YYYYMMDD のテーブルを中心に説明します。

日付ごとのテーブル(シャード)

events_ のテーブルは、日付ごとに別のテーブル に分かれています(日付シャード テーブル)。複数の日のデータをまとめて集計するときは、ワイルドカード(*)と _TABLE_SUFFIX を使います。

SELECT event_name, COUNT(*) AS event_count
FROM `example-ga4-analytics.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261027'
GROUP BY event_name
ORDER BY event_count DESC

_TABLE_SUFFIX は、ワイルドカードの * の部分に当たる文字列(ここでは日付)です。条件で絞ると、必要な日のテーブルだけを読む ため、費用を抑えられます。

注意 events_* には、events_intraday_ のテーブルも含まれます(* の部分が intraday_20261028 になる)。日次のテーブルだけを読みたい場合は、上の例のように _TABLE_SUFFIX を日付の範囲で絞るか、_TABLE_SUFFIX NOT LIKE 'intraday%' の条件を付けましょう。

1 行 = 1 イベント

events_ のテーブルでは、1 行が 1 つのイベント です。たとえば、ユーザーがページを 3 つ見てボタンを 1 回クリックすると、page_view の行が 3 つ、クリックのイベントの行が 1 つ、のように記録されます(ほかに session_start や user_engagement などの行もあります)。

主な列

列型内容
event_dateSTRINGイベントの日付(YYYYMMDD、プロパティのタイムゾーン)
event_timestampINTEGERイベントの日時(マイクロ秒、UTC)
event_nameSTRINGイベント名(page_view、purchase など)
event_paramsRECORD(繰り返し)イベントのパラメータ(次の節)
user_pseudo_idSTRINGブラウザ・アプリの仮名の ID(Cookie の値に基づく)
user_idSTRINGUser-ID(送っている場合)
user_propertiesRECORD(繰り返し)ユーザー プロパティ
user_first_touch_timestampINTEGERユーザーが初めて訪れた日時
deviceRECORDデバイスの情報(device.category、device.operating_system、device.web_info.browser など)
geoRECORD地域の情報(geo.country、geo.region、geo.city など)
traffic_sourceRECORDユーザーを 最初に獲得した 流入元(traffic_source.source、traffic_source.medium、traffic_source.name)
collected_traffic_sourceRECORDそのイベントで収集された流入元の情報(UTM や gclid など)
ecommerceRECORDEC の情報(ecommerce.transaction_id、ecommerce.purchase_revenue など)
itemsRECORD(繰り返し)商品の情報
platformSTRINGWEB、ANDROID、IOS

注意 traffic_source は、セッションの流入元ではなく、ユーザーの初回の流入元 です。セッションごとの流入元を集計したい場合は、collected_traffic_source やイベントのパラメータ(source、medium など)を使うか、新しく追加されたセッションの流入元の列(session_traffic_source_last_click など)が使えるかを確認しましょう。エクスポートのスキーマは、機能の追加にあわせて列が増えることがあります。

event_params の構造

GA4 のイベントのパラメータは、event_params という 繰り返しの RECORD(配列)に入っています。

形のイメージ

1 行(page_view のイベント)
├ event_name: page_view
└ event_params:
     ├ { key: "page_location",   value: { string_value: "https://www.example.co.jp/blog/" } }
     ├ { key: "page_title",      value: { string_value: "ブログ一覧" } }
     ├ { key: "ga_session_id",   value: { int_value: 1761612345 } }
     ├ { key: "ga_session_number", value: { int_value: 3 } }
     └ { key: "engagement_time_msec", value: { int_value: 5200 } }
項目内容
keyパラメータの名前
value.string_value文字列の値
value.int_value整数の値
value.float_value / value.double_value小数の値

パラメータの値は、型によって入る場所が違います。たとえば、ga_session_id は int_value に、page_location は string_value に入ります。

よく使うパラメータ

key値の場所内容
page_locationstring_valueページの URL
page_titlestring_valueページのタイトル
page_referrerstring_value参照元の URL
ga_session_idint_valueセッションの ID(同じユーザーの中で、セッションを区別する)
ga_session_numberint_valueそのユーザーの何回目のセッションか
engagement_time_msecint_valueエンゲージメントの時間(ミリ秒)
session_engaged型が一定でない場合があるエンゲージメントのあったセッションかどうか
source / medium / campaignstring_value流入元の情報(session_start などのイベントに付くことがある)

ポイント パラメータの値がどの型に入っているかわからないときは、string_value、int_value、double_value をすべて表示して確認するか、COALESCE でまとめて取り出す方法があります(次の章)。

user_properties と items

user_properties

ユーザー プロパティ も、event_params と同じ形の、繰り返しの RECORD に入っています。

user_properties:
  ├ { key: "member_rank", value: { string_value: "gold", set_timestamp_micros: ... } }
  └ { key: "login_status", value: { string_value: "logged_in", set_timestamp_micros: ... } }

set_timestamp_micros は、そのユーザー プロパティが設定された日時です。

items

EC のイベント(view_item、add_to_cart、purchase など)の 商品 の情報は、items という繰り返しの RECORD に入っています。1 つのイベントに、複数の商品が入ることがあります。

1 行(purchase のイベント)
├ event_name: purchase
├ ecommerce.transaction_id: T-20261028-0001
├ ecommerce.purchase_revenue: 12800
└ items:
     ├ { item_id: "SKU-001", item_name: "オーガニック コットン タオル", price: 3200, quantity: 4, item_revenue: 12800, ... }
     └ ...
列内容
items.item_id商品の ID
items.item_name商品名
items.item_category 〜 items.item_category5商品のカテゴリ
items.price単価
items.quantity数量
items.item_revenue商品の収益
items.item_params商品のカスタム パラメータ(設定した場合)

日付とタイムゾーン

BigQuery のデータで、日付と時刻を扱うときは、タイムゾーン に注意が必要です。

列・テーブル名タイムゾーン
event_dateGA4 のプロパティで設定したタイムゾーン(日本なら通常は日本時間)
テーブル名の日付(events_20261028)プロパティのタイムゾーン
event_timestampUTC(協定世界時)

日本時間の日時に変換する

SELECT
    event_name,
    TIMESTAMP_MICROS(event_timestamp) AS event_time_utc,
    DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Tokyo') AS event_time_jst
FROM `example-ga4-analytics.analytics_123456789.events_20261028`
LIMIT 10
関数内容
TIMESTAMP_MICROS()マイクロ秒の整数を、タイムスタンプに変換する
DATETIME(タイムスタンプ, 'Asia/Tokyo')日本時間の日時に変換する
PARSE_DATE('%Y%m%d', event_date)event_date の文字列を、日付型に変換する

注意 時間帯ごとの集計(何時にアクセスが多いか、など)をするときに、event_timestamp をそのまま使うと、UTC の時刻になり、日本時間とは 9 時間ずれます。必ず日本時間に変換してから集計しましょう。

まとめ

  • events_YYYYMMDD は日付ごとのテーブルで、ワイルドカードと _TABLE_SUFFIX で期間を絞って読む
  • 1 行が 1 イベントで、ユーザーは user_pseudo_id(と user_id)で識別する
  • パラメータは event_params の繰り返しの RECORD に、key と型ごとの値の形で入っている
  • ユーザー プロパティは user_properties、商品の情報は items に、同じく繰り返しの形で入っている
  • traffic_source はユーザーの初回の流入元であり、event_timestamp は UTC である点に注意する

次の章では、SQL を使って、GA4 のデータからユーザー数やセッション数、ページ別の数値を集計する方法を学びます。