← 返回部落格部落格

確認事件日誌的儲存結構與載入失敗資料:事件日誌傳送 第4篇

Hive Analytics · 2026年10月29日 · 閱讀約 5 分鐘

傳送到 Hive Analytics 的事件中,符合收集標準的事件會儲存在各公司 BigQuery 資料集的 t_raw_event_log,不符合標準的事件則會連同原始 JSON 與隔離原因儲存在 t_raw_event_log_rescue。若在一般資料表中找不到事件,可透過 rescue 資料表的 errorReason、errorStackTrace、rawData 確認隔離原因。例如 eventTime 不符合 RFC 3339 格式時,事件會以 201(DATETIME_INVALID)錯誤被隔離。此時修正時間格式並重新傳送事件後,確認事件已儲存在一般資料表即可。

確認已傳送事件的儲存結果

「將遊戲資料以事件日誌傳送:事件日誌傳送 第3篇」介紹了如何將實際遊戲資料以事件日誌傳送。本篇將說明已傳送事件的儲存結構,以及未能正常儲存的事件被隔離的原因與確認方法。

套用日誌傳送功能後,必須確認事件是否已正常儲存。符合必要屬性與值的格式等收集標準的事件會儲存在一般資料表,不符合標準的事件則會儲存在另外的隔離資料表。

若在一般資料表中找不到已傳送的事件,不應只判斷為收集延遲,而需要一併確認事件是否被隔離以及原因。

Hive Analytics 的事件儲存結構

事件資料

Hive Analytics 正常收集的事件會儲存在各公司 BigQuery 資料集的 t_raw_event_log 資料表。此資料表以 dateTime 為基準按日分區,並一併儲存事件的基本資訊與屬性。

欄位資料型別說明產生方式
userIdSTRING以帳號識別用戶的值以必要屬性傳送
identifierProviderSTRING核發用戶識別碼的系統以必要屬性傳送
deviceIdSTRING以裝置識別用戶的值以必要屬性傳送
appIdSTRING識別發生事件之 App 的值以必要屬性傳送
appIdGroupSTRING將多個 App 歸為同一款遊戲(專案)的值依 appId 自動產生
dateTimeTIMESTAMP將 eventTime 轉換為 UTC 的事件發生時間解析 eventTime 後自動產生
eventNameSTRING區分事件的名稱以必要屬性傳送
checksumSTRING以事件資料產生的雜湊值依事件資料自動產生
bigqueryRegistTimestampTIMESTAMP事件儲存到 BigQuery 的時間儲存時自動產生
attributesJSON儲存自訂屬性與自動收集屬性的區域將傳送的屬性依結構自動產生

contents_success 事件正常收集後,事件的基本資訊與屬性值會如下圖儲存在同一列。同一事件重新傳送時,可能會儲存重複資料。直接查詢原始資料時,建議以 checksum 為基準去除重複。

在 BigQuery 查詢 t_raw_event_log,contents_success 事件的基本資訊與 attributes 儲存在同一列的結果畫面
t_raw_event_log 中,事件的基本資訊與屬性值儲存在同一列。

事件屬性的儲存結構

隨事件傳送或自動收集的屬性,會以 JSON 格式儲存在 attributes 欄位。attributes 內部依屬性的收集方式分為 hiveAttributes 與 eventAttributes。

區分說明主要值
hiveAttributesHive Analytics 在資料處理過程中自動加入的屬性_dataSource
eventAttributes隨事件傳送,或由用戶端自動收集的屬性原始 eventTime、自訂屬性、SDK 自動收集屬性

查看 hiveAttributes 的 _dataSource,即可區分事件是透過 Hive SDK 或遊戲伺服器等哪一種路徑傳送。在 eventAttributes 中,可以確認遊戲直接傳送的自訂屬性及其實際值。透過 Hive SDK 自動收集的用戶端屬性也包含在此區域。詳細內容請參閱 Hive 開發者網站的事件儲存結構。

隔離資料

不符合必要屬性與值的格式等收集標準的事件會載入失敗,並被隔離到各公司 BigQuery 資料集的 t_raw_event_log_rescue。隔離資料表會一併儲存傳送的原始 JSON 與隔離原因。若在一般資料表中找不到事件,請在 rescue 資料表確認該事件是否被隔離。

主要隔離原因說明
缺少必要屬性缺少傳送日誌所需的屬性,或值為空
使用保留字以 attributes、eventAttributes、hiveAttributes 作為自訂屬性名稱,或使用以 _ 開頭的屬性名稱
不支援的資料型別以 JSON 物件或陣列作為自訂屬性值傳送
eventTime 格式錯誤無法將 eventTime 解讀為包含時區的 RFC 3339 格式
eventTime 超出允許範圍事件發生時間超出可收集的範圍(過去 10 年至未來 5 年)
JSON 格式錯誤無法將傳送的日誌解讀為正確的 JSON

屬性名稱使用的保留字不區分英文大小寫。例如 Attributes 或 HIVEATTRIBUTES 也會被視為保留字,因此請勿作為自訂屬性名稱使用。

隔離資料表的儲存結構

t_raw_event_log_rescue 會儲存可從原始日誌讀取的事件基本資訊、原始資料與隔離原因。

欄位資料型別說明
userIdSTRING可從原始日誌讀取的用戶識別碼
identifierProviderSTRING核發用戶識別碼的系統
deviceIdSTRING可從原始日誌讀取的裝置識別碼
appIdGroupSTRING事件所屬遊戲(專案)的識別值
dateTimeSTRING傳送的原始 eventTime 值
eventNameSTRING區分事件的名稱
bigqueryRegistTimestampTIMESTAMP事件儲存到 BigQuery 的時間
checksumSTRING以事件資料產生的雜湊值
rawDataSTRING傳送事件的原始 JSON
errorReasonSTRING表示事件被隔離原因的代碼
errorStackTraceSTRING缺少的欄位等隔離原因的詳細資訊

一般資料表的 dateTime 會儲存由 eventTime 轉換的 TIMESTAMP 值。隔離資料表的 dateTime 則會以字串儲存原始 eventTime,方便確認傳送值的問題。

確認 contents_success 的隔離原因

以下是傳送 contents_success 事件後,在 BigQuery 確認被隔離資料的過程。

申請 BigQuery 查詢權限
確認隔離原因需要 BigQuery 原始資料查詢權限。若要使用 BigQuery,請先取得 Hive Analytics 管理員權限,再從 Hive Analytics 的帳號選單申請 BigQuery 查詢權限。權限生效後,進入 Google Cloud 的 BigQuery 主控台,在探索工具中確認已獲得查詢權限的 Hive Analytics 專案與各公司資料集。接著查詢該資料集的 t_raw_event_log_rescue。BigQuery 使用方式的詳細內容,請參閱 Hive 開發者網站的BigQuery 設定。

在 BigQuery 查詢 t_raw_event_log_rescue 的 errorReason、errorStackTrace 與 rawData 的畫面
查詢隔離資料,確認錯誤代碼與原始資料。

在 BigQuery 查詢 t_raw_event_log_rescue 後,errorReason 顯示為 201。確認 errorStackTrace 與 rawData 後,可以看到 eventTime 以 2026-10-26T17:51:57+09:00+09:00 傳送,時區重複。此值不符合 RFC 3339 格式,因此無法解析為儲存用的 dateTime。

隔離代碼與處理方式

errorReason處理方式
100傳送的訊息不是有效的 JSON。請先驗證 JSON 格式再傳送。
200以包含時區的 RFC 3339 格式傳送 eventTime 欄位。此外,請確保 eventTime 的時間值落在允許範圍(過去 10 年~未來 5 年)內再傳送。
201以包含時區的 RFC 3339 格式傳送 eventTime 欄位。
300attributes、eventAttributes、hiveAttributes 是管線自動產生的保留欄位,請勿直接包含在事件中。以 _ 開頭的欄位名稱保留給管線內部使用,請勿使用。
400確認已包含所有必要欄位(userId、identifierProvider、deviceId、appId、eventName、eventTime)後再傳送。
401事件屬性值包含 JSON 物件({})或陣列([])。所有屬性都以單層扁平結構(字串/數字)傳送。JSON 字串("{...}"、"[...]")也會被拒絕。

確認 eventTime 的正確格式與允許範圍後,將值修正為只包含一次時區,例如 2026-10-26T17:51:57+09:00,再重新傳送。之後以相同條件查詢資料,確認修正後的事件已正常儲存在 t_raw_event_log。

開始使用 Hive Analytics

正常收集的事件會儲存在 t_raw_event_log,不符合收集標準的事件則會連同原始資料與錯誤資訊被隔離到 t_raw_event_log_rescue。同時確認兩個資料表,就能區分事件的儲存結果,找出未能正常收集之日誌的原因,並修正傳送程式碼。

Hive Analytics 是一款遊戲專用的分析解決方案,可以分析收集到的遊戲事件,並確認未正常處理之事件日誌的隔離原因與原始資料,找出問題的原因。現在就到 Hive Analytics 的 BigQuery 資料集確認事件的傳送狀態吧。