事件存储结构¶
大纲¶
您可以查看传输的事件日志如何存储在 BigQuery 中、attributes 和 JSON 字段的详细结构以及如何隔离违反传输规则的日志。
表结构¶
发送的事件日志存储在公司特定的 BigQuery 数据集的 t_raw_event_log 表中。
表列结构¶
存储位置¶
| 项目 | 格式 |
|---|---|
| 表 | t_raw_event_log |
| 分区 | 每日分区按 dateTime |
列定义¶
| 栏目名称 | 数据类型 | 描述 | 示例 |
|---|---|---|---|
userId | STRING | 作为必需属性发送的值 userId | 100001 |
identifierProvider | STRING | 作为必需属性发送的值 identifierProvider | hive |
deviceId | STRING | 作为必需属性发送的值 deviceId | 100000 |
appId | STRING | 作为必需属性发送的值 appId | "com.com2us.game.ios" |
appIdGroup | STRING | 根据必需属性 appId 在应用中心 Hive 转换为游戏名称的值 | com.com2us.game |
dateTime | TIMESTAMP | 必需属性 eventTime 转换为 UTC | 2026-07-20T05:01:01Z |
eventName | STRING | 作为必需属性发送的值 eventName | asset_drop |
checksum | STRING | 为每个事件生成的哈希值 | HW2FTEB56TEEWER |
bigqueryRegistTimestamp | TIMESTAMP | 该事件存储在 UTC 的 UTC | 2026-07-20T05:02:01Z |
attributes | JSON | JSON 存储自定义和自动收集的属性的字段 | 见下文 |
attributes 示例
{
"hiveAttributes": {
"dataSource": "custom_server",
"geoIpCountry": "KR"
},
"eventAttributes": {
"eventTime": "2026-07-20T14:01:01+09:00",
"level": 10,
"character_name": "AA",
"stage_id": "stage_101"
}
}
表结构注意事项 & Tips¶
- 同一事件可能会因重传等原因而出现冗余存储,因此搜索时建议使用基于
checksum的去重查询。 - 违反传输规则的事件日志存储在 rescue 表中,而不是此表中。有关详细信息,请参阅数据隔离。
attributes 详细属性¶
Note
attributes 列的类型为 JSON,分为两个区域:hiveAttributes 和 eventAttributes。
attributes 示例¶
{
"hiveAttributes": {
"dataSource": "custom_server",
"geoIpCountry": "KR"
},
"eventAttributes": {
"eventTime": "2026-07-20T14:01:01+09:00",
"level": 10,
"character_name": "AA"
}
}
hiveAttributes¶
这是管道自动处理和存储的区域。
| 属性名称 | 数据类型 | 描述 | 示例 |
|---|---|---|---|
dataSource | STRING | 事件日志的发送器。请参阅下面的详细 dataSource | custom_server |
geoIpCountry | STRING | 管道根据 IP (ISO 3166 alpha-2) 确定的国家/地区代码 | KR |
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 中的发送事件日志功能发送到旧版 Analytics 的自定义事件 |
custom_server_mig | 客户从其服务器发送到旧版本 Analytics 的自定义事件 |
custom_except | 在事件转换过程中作为例外情况生成并传输 eventAttribute、hiveAttribute 的事件 |
eventAttributes¶
这是存储用户发送的属性和SDK自动收集的属性的区域。
| 属性名称 | 数据类型 | 描述 |
|---|---|---|
eventTime | STRING | eventTime 作为必需属性发送的原始值 |
| (用户定义的属性) | 数字/字符 | 用户直接发送的自定义属性 |
| (自动收集的属性) | 因属性而异 | SDK自动收集的客户信息(传输客户时) |
attributes 注意事项 & Tips¶
hiveAttributes不是开发者直接设置值的区域,而是管道自动填充的区域。不保存dataSource和geoIpCountry以外的值。- 自定义属性和 SDK 自动收集的属性一起存储在
eventAttributes中。搜索时,必须通过属性名称来区分。 - 您可以使用
dataSource值区分事件日志的传输路径(SDK/服务器/MMP等)进行搜索。
数据隔离¶
Warning
不符合传输规则的事件日志不会存储在普通表 (t_raw_event_log) 中,而是单独存储在**隔离表 (t_raw_event_log_rescue)** 中。 隔离表保留原始的 JSON,因此您可以确定隔离的原因、修复它并重新传输。
隔离原因¶
| 错误原因 | 描述 | 如何回应 |
|---|---|---|
| 缺少必需的属性 | 七个必需属性(userId、identifierProvider、deviceId、appId、eventTime、eventName、appIdGroup)中的任何一个缺失或具有空值 | 重新发送缺少必需的属性 |
| 保留字的使用 | 当 attributes、eventAttributes 和 hiveAttributes 用作属性名称时(大小写无关) | 将属性名称更改为其他名称 |
| 不允许属性值 | 如果属性值的形式为 JSON 对象 ({}) 或 JSON 数组 ([]) | 将属性值更改为字符串或数字 |
| 格式错误 eventTime | eventTime 不是 RFC 3339 格式或无法解析 | RFC 修改为3339格式(含时区) |
| eventTime 超出范围 | eventTime 超出当前时间过去 31 天或未来 31 天 | eventTime 检查数值并修改至正常范围 |
| 解析 JSON 失败 | 发送的消息的格式无效 | JSON 验证格式并重新发送 |
隔离表结构¶
隔离事件日志存储在 t_raw_event_log_rescue 表中,结构如下:
| 栏目名称 | 数据类型 | 描述 |
|---|---|---|
userId | STRING | 已发送 userId(如果可解析) |
identifierProvider | STRING | 已发送 identifierProvider |
deviceId | STRING | 已发送 deviceId |
appIdGroup | STRING | 已发送 appIdGroup |
dateTime | STRING | 传输的原始值 eventTime (另存为字符串,而不是 TIMESTAMP) |
eventName | STRING | 已发送 eventName |
bigqueryRegistTimestamp | TIMESTAMP | BigQuery 节省时间 |
checksum | STRING | 哈希值 |
rawData | STRING | 所有原始 JSON 均已发送 |
errorReason | STRING | 隔离原因代码 |
errorStackTrace | STRING | 隔离详细信息(缺少字段名称等) |