イベント保存構造¶
概要¶
送信されたイベントログが 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基準の重複排除クエリを併用することをお勧めします。 -
転送ルールに違反したイベントログは、このテーブルではなく 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;