コンテンツにスキップ

イベント保存構造

概要

送信されたイベントログが BigQuery に格納される構造、attributes JSON フィールドの詳細構造、転送ルールに違反したログの分離方法を確認できます。


テーブル構造

送信されたイベントログは、会社固有の BigQuery データセットの t_raw_event_log テーブルに保存されます。

テーブル列構造

保存場所

項目 形式
テーブル t_raw_event_log
パーティショニング dateTime 基準の日別パーティション

列定義

列名 データ型 必須 説明 例
userId STRING Y アカウント基準のユーザー識別子 100001
identifierProvider STRING Y ユーザー識別子の発行システム。常に hive hive
deviceId STRING Y デバイス基準のユーザー識別子 100000
appId STRING Y Hive コンソール > アプリセンターに登録されたプロジェクト ID "com.com2us.game.ios"
appIdGroup STRING Y Hive コンソール > アプリセンターで発行されたゲーム ID。appId に基づいて変換された値 com.com2us.game
dateTime TIMESTAMP Y イベントが発生した時刻。eventTime を UTC に変換した値 2026-07-20T05:01:01Z
eventName STRING Y イベントを区分するイベント名 asset_drop
checksum STRING N パイプラインで注入されたフィールドやシステムで生成されたフィールド(hiveAttributes など)をすべて除き、顧客が送信した元データのみで生成したハッシュ値 HW2FTEB56TEEWER
bigqueryRegistTimestamp TIMESTAMP N イベントが BigQuery に保存された UTC 時刻 2026-07-20T05:02:01Z
attributes JSON N カスタム属性と自動収集属性が保存される JSON フィールド 以下を参照

テーブル構造に関する注意事項 & Tips

  • 再送信などにより同じイベントが重複して保存される場合があるため、照会時には checksum 基準の重複排除クエリを併用することをお勧めします。

    QUALIFY ROW_NUMBER() OVER (PARTITION BY checksum ORDER BY bigqueryRegistTimestamp DESC) = 1
    
  • 転送ルールに違反したイベントログは、このテーブルではなく rescue テーブルに保存されます。詳細については、データ分離を参照してください。


attributes 詳細属性

Note

attributes 列は JSON タイプで、hiveAttributes と eventAttributes の 2 つの領域に分けられます。

attributes 例

{
  "hiveAttributes": {
    "_clientIp": "220.70.82.0",
    "_dataSource": "custom_server",
    "_fluentd_appid": "com.com2us.game.ios",
    "_fluentd_sender_ip": "43.101.101.33",
    "_fluentd_hostaname": "9104813d31ab",
    "_fluentd_tag": "ha2union.game.stage",
    "_geoIpCountry": "KR",
    "_market": "google",
    "_os": "android"
  },
  "eventAttributes": {
    "eventTime": "2026-07-20T14:01:01+09:00",
    "level": 10,
    "character_name": "AA",
    "stage_id": "stage_101"
  }
}

hiveAttributes

パイプラインが自動的に処理して保存する領域です。

属性名 データ型 説明 例
_clientIp STRING ログとともに client_ip または clientIp を送信した場合、送信された IP の最後のオクテットを 0 に変更した値。client_ip または clientIp を送信しない場合は生成されません 220.70.82.0
_geoIpCountry STRING パイプラインが client_ip または clientIp に基づいて判定した国コード(ISO 3166 alpha-2)。client_ip または clientIp を送信しない場合は生成されません KR
_dataSource STRING パイプラインが判断した、イベントログが実際に流入した経路。以下の _dataSource 詳細を参照 custom_server
_fluentd_appid STRING パイプラインが判断したログ収集器(Fluentd)の appId com.com2us.game.ios
_fluentd_sender_ip STRING パイプラインが判断したログ収集器(Fluentd)の IP 43.101.101.33
_fluentd_hostaname STRING パイプラインが判断したログ収集器(Fluentd)の hostname 9104813d31ab
_fluentd_tag STRING パイプラインが判断した、ログ収集器(Fluentd)に送信されたタグ名 ha2union.game.stage
_market STRING アナリティクスが appId から判断したマーケット情報 google
_os STRING アナリティクスが appId から判断した OS 情報 android

_dataSource 詳細

_dataSource はイベントログが実際に流入した経路を表し、次のいずれかの値が自動的に設定されます。

値 説明
airbridge Airbridge で収集されたイベント
appsflyer Appsflyer で収集されたイベント
adjust Adjust で収集されたイベント
singular Singular で収集されたイベント
hive_server Hive 認証、ビリングなどを通じて自動的に収集されるイベント
hive_sdk Hive SDK が自動的に収集するファネルなどのイベント
custom_server 顧客がサーバーから送信するカスタムイベント
custom_sdk 顧客が Hive SDK のイベントログ送信機能を通じて送信するカスタムイベント
custom_sdk_mig 顧客が Hive SDK のイベントログ送信機能を通じて旧バージョンのアナリティクスに送信するカスタムイベント
custom_server_mig 顧客がサーバーから旧バージョンのアナリティクスに送信するカスタムイベント
custom_except イベント変換処理中に例外的なケースとして eventAttribute、hiveAttribute を生成して送信するイベント

eventAttributes

ユーザーが送信した属性と SDK が自動的に収集した属性が保存される領域です。

属性名 データ型 説明
eventTime STRING 必須属性として送信された eventTime の元の値
(ユーザー定義属性) 数値/文字列 ユーザーが直接送信したカスタム属性
(自動収集属性) 属性ごとに異なる SDK が自動的に収集したクライアント情報(クライアント送信時)

attributes 注意事項 & Tips

  • hiveAttributes は開発者が直接値を設定する領域ではなく、パイプラインが自動的に埋める領域です。_clientIp、_dataSource、_fluentd_appid、_fluentd_sender_ip、_fluentd_hostaname、_fluentd_tag、_geoIpCountry、_market、_os 以外の値は保存されません。
  • カスタム属性と SDK 自動収集属性は、どちらも eventAttributes にまとめて保存されます。照会時には属性名で区別する必要があります。
  • _dataSource の値でイベントログの転送経路(SDK/サーバー/MMP など)を区別して照会できます。

データ分離

Warning

転送ルールに準拠していないイベントログは、通常テーブル(t_raw_event_log)には保存されず、分離テーブル(t_raw_event_log_rescue)に別途保存されます。 分離テーブルには元の JSON がそのまま保存されるため、分離の原因を特定して修正し、再送信できます。


分離理由

エラー理由 説明 対応方法
必須属性の欠落 7 つの必須属性(userId、identifierProvider、deviceId、appId、appIdGroup、eventTime、eventName)のいずれかがない、または値が空の場合 欠落している必須属性を含めて再送信
予約語の使用 属性名として attributes、eventAttributes、hiveAttributes を使用した場合(大文字・小文字を区別しない) 該当する属性名を別の名前に変更
許可されていない属性値 属性値が JSON オブジェクト({})または JSON 配列([])の形式の場合 属性値を文字列または数値に変更
eventTime 形式エラー eventTime が RFC 3339 形式でない、または解析できない場合 RFC 3339 形式(タイムゾーンを含む)に修正
eventTime 範囲超過 eventTime が現在時刻を基準に過去 10 年~未来 5 年の範囲外の場合 eventTime の値を確認して正常範囲に修正
JSON 解析失敗 送信されたメッセージが有効な JSON 形式でない場合 JSON 形式を検証して再送信

分離テーブル構造

分離されたイベントログは、t_raw_event_log_rescue テーブルに次の構造で保存されます。各列は元の JSON を解析できた場合にのみ値が入り、解析できない場合は空の値で保存されます。元のデータは rawData で確認できます。

列名 データ型 説明
userId STRING 送信された userId
identifierProvider STRING 送信された identifierProvider
deviceId STRING 送信された deviceId
appIdGroup STRING 送信された appIdGroup
dateTime STRING 送信された eventTime の元の値(TIMESTAMP ではなく文字列のまま保存)
eventName STRING 送信された eventName
bigqueryRegistTimestamp TIMESTAMP ログが BigQuery に保存された時刻
checksum STRING パイプラインで注入されたフィールドやシステムで生成されたフィールド(hiveAttributes など)をすべて除き、顧客が送信した元データのみで生成したハッシュ値
rawData STRING 送信された元の JSON 全体
errorReason STRING 分離理由コード。分離理由コードを参照
errorStackTrace STRING 分離の詳細(欠落したフィールド名など)

分離理由コード

error_code error_key 条件
100 JSON_PARSE_ERROR JSON の解析に失敗
200 DATETIME_MISSING dateTime フィールドがない、または空の値
201 DATETIME_INVALID dateTime を解析できない
— DATASOURCE_MISSING _dataSource が null または未定義の値

分離ログの照会例

分離されたログは BigQuery で直接照会できます。BigQuery で照会するには、まず BigQuery の権限を申請する必要があります。

SELECT
  errorReason,
  errorStackTrace,
  eventName,
  dateTime,
  rawData,
  bigqueryRegistTimestamp
FROM `habq-storage.analytics_N_live.t_raw_event_log_rescue`
WHERE appIdGroup = 'com.sample.test'  -- 実際に使用している appIdGroup
LIMIT 100;

関連メニュー