Google Analytics (分析) 開發人員服務代表 Minhaz Kazi - 2022 年 10 月
如要評估大型資料集的確切不重複計數 (即基數),就需要龐大的記憶體,並會影響效能。Google Analytics (分析) 4 資源使用 HyperLogLog++ (HLL++) 演算法來「估算」常用指標的基數,包括「活躍使用者」和「工作階段」。舉例來說,在 Google Analytics (分析) UI 和 Data API 中查看活躍使用者時,計數就會是約略值。針對這些指標使用 HLL++ 時,預估準確度較高、錯誤範圍下限也更低,因此可確保效能更佳。這篇網誌文章詳細說明 HLL++ 在 Google Analytics (分析) 4 資源中的使用方式,以及如何使用 BigQuery 事件匯出資料複製部分預估值。
關於 HLL++
HLL++「估計」基數,同時減少記憶體並提升效能。HLL++ 使用 HyperLogLog 演算法的強化功能,並以 HyperLogLog in Practice: Algorithmic Engineering of the Art Cinality Estimation Algorithm。HLL++ precision
參數中的變更會捨棄記憶體用量,與計算的統計資料的準確度比較。增加參數值可減少錯誤,但會增加記憶體用量。
BigQuery 中的不重複計數實作
- 使用
COUNT(DISTINCT)
評估確切基數。這個方法需要較多的記憶體,並且需要較長的執行時間。對於大型資料集而言,更是如此。 APPROX_COUNT_DISTINCT
會使用 HLL++ 估算結果。不過,APPROX_COUNT_DISTINCT
不允許使用者設定近似準確率。- 如要使用自訂的
precision
值,請使用 HyperLogLog++ 函式。請參閱 HLL++ 草圖,瞭解允許的precision
值以及一般精確度的信賴區間。 sparse precision
是 HLL+ 的另一個參數。在 BigQuery 中,sparse precision
值無法由使用者定義,且固定在precision + 5
中。
Google Analytics (分析) 4 資源中的 HLL++ 導入作業
Google Analytics (分析) 4 會使用下列設定測量相關指標的基數。
指標 | precision |
sparse precision |
---|---|---|
工作階段 | 12 | 17 |
活躍使用者 | 14 | 25 |
使用者總數 | 14 | 25 |
使用 BigQuery HLL++ 函式搭配 Google Analytics (分析) 事件資料
如果您在 BigQuery 中提供了 Google Analytics (分析) 4 資源的事件資料,可以嘗試比對 UI 的指標與 BigQuery 資料。以下範例假設:
- Google Analytics (分析) 4 資源的報表 ID 已設為
By device only
。 - 其他造成差異的可能來源 (例如報表時區) 已經解決。
使用者總數
使用 COUNT(DISTINCT)
計算的確切數量:
SELECT
COUNT(DISTINCT user_pseudo_id) AS exact_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
使用 APPROX_COUNT_DISTINCT
的概略計數:
SELECT
APPROX_COUNT_DISTINCT(user_pseudo_id) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
您可以使用 BigQuery HLL++ 函式複製 APPROX_COUNT_DISTINCT
。這樣會傳回與 APPROX_COUNT_DISTINCT
相同或非常相似的結果:
SELECT
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 15)) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
最後,如要在 Google Analytics (分析) 使用者介面中複製資料,請使用 precision = 14
:
SELECT
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
活躍使用者人數
如要從 BigQuery 事件匯出資料表計算「活躍使用者」計數,您必須先篩選出「活躍使用者」的事件。實作「Active User」篩選器並不在本文的討論範圍內。
WITH ActiveUsers AS
(
SELECT
user_pseudo_id
FROM
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
<implement active user filter logic>
)
SELECT
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS active_user_count,
FROM ActiveUsers
工作階段
ga_session_id
事件參數可識別每位使用者的不重複工作階段。在資料集中,user_pseudo_id
和 ga_session_id
的組合在不重複工作階段都不得重複。這是 Google Analytics (分析) 4 資源計算工作階段的標準方法。以工作階段來說,precision
為 12。
SELECT
HLL_COUNT.EXTRACT(
HLL_COUNT.INIT(
CONCAT(
user_pseudo_id,
(SELECT `value` FROM UNNEST(event_params) WHERE key = 'ga_session_id' LIMIT 1).int_value),
12)) AS session_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
您可以在這篇網誌文章中使用「基本查詢」和「進階查詢」範例查詢,從 Google Analytics (分析) 4 資源的 BigQuery 事件匯出資料中取得額外深入分析。如果資源產生大量事件資料,您也可以實作 HLL++ 函式,預估您在 BigQuery 查詢中常用的其他指標基數。如要進一步瞭解 HLL++,以及為何大型資料集的基數計算會耗用大量資源,請參閱 Cloud 網誌上的深入這篇網誌文章:使用 HLL++ 加快大型資料集的數量差異。