10.4 GA4 のエクスポート スキーマ
この章で学ぶこと
- BigQuery に出力される GA4 のテーブルの種類
- イベントのパラメータ(event_params)が入っている形
- ユーザー プロパティ(user_properties)と商品(items)の形
- 日付とタイムゾーンの扱い
テーブルの種類
GA4 の BigQuery エクスポートでは、データセット analytics_<プロパティ ID> の中に、次のようなテーブルが作られます。
| テーブル | 内容 | 作られる条件 |
|---|---|---|
events_YYYYMMDD | 1 日分のイベントのデータ(確定) | 毎日のエクスポート |
events_intraday_YYYYMMDD | 当日のイベントのデータ(ほぼリアルタイム。日次のテーブルができると削除される) | ストリーミングのエクスポート |
pseudonymous_users_YYYYMMDD | Cookie などの仮名の ID 単位のユーザーのデータ | ユーザーデータのエクスポート |
users_YYYYMMDD | User-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_date | STRING | イベントの日付(YYYYMMDD、プロパティのタイムゾーン) |
event_timestamp | INTEGER | イベントの日時(マイクロ秒、UTC) |
event_name | STRING | イベント名(page_view、purchase など) |
event_params | RECORD(繰り返し) | イベントのパラメータ(次の節) |
user_pseudo_id | STRING | ブラウザ・アプリの仮名の ID(Cookie の値に基づく) |
user_id | STRING | User-ID(送っている場合) |
user_properties | RECORD(繰り返し) | ユーザー プロパティ |
user_first_touch_timestamp | INTEGER | ユーザーが初めて訪れた日時 |
device | RECORD | デバイスの情報(device.category、device.operating_system、device.web_info.browser など) |
geo | RECORD | 地域の情報(geo.country、geo.region、geo.city など) |
traffic_source | RECORD | ユーザーを 最初に獲得した 流入元(traffic_source.source、traffic_source.medium、traffic_source.name) |
collected_traffic_source | RECORD | そのイベントで収集された流入元の情報(UTM や gclid など) |
ecommerce | RECORD | EC の情報(ecommerce.transaction_id、ecommerce.purchase_revenue など) |
items | RECORD(繰り返し) | 商品の情報 |
platform | STRING | WEB、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_location | string_value | ページの URL |
page_title | string_value | ページのタイトル |
page_referrer | string_value | 参照元の URL |
ga_session_id | int_value | セッションの ID(同じユーザーの中で、セッションを区別する) |
ga_session_number | int_value | そのユーザーの何回目のセッションか |
engagement_time_msec | int_value | エンゲージメントの時間(ミリ秒) |
session_engaged | 型が一定でない場合がある | エンゲージメントのあったセッションかどうか |
source / medium / campaign | string_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_date | GA4 のプロパティで設定したタイムゾーン(日本なら通常は日本時間) |
テーブル名の日付(events_20261028) | プロパティのタイムゾーン |
event_timestamp | UTC(協定世界時) |
日本時間の日時に変換する
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 のデータからユーザー数やセッション数、ページ別の数値を集計する方法を学びます。