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 實踐:藝術國家的演算法工程
基數估算演算法。HLL++ precision
參數中的變更
比較記憶體用量與計算出的統計資料的準確性。提高
參數值可以降低錯誤,但會增加記憶體消耗量。
BigQuery 中的不重複計數實作
- 使用
COUNT(DISTINCT)
測量確切基數。這種做法 會增加記憶體執行時間,需要更長的執行時間,大型資料集更是如此。 APPROX_COUNT_DISTINCT
會使用 HLL++ 估算結果。不過 「APPROX_COUNT_DISTINCT
」不允許使用者設定概略值 準確度。- 如要使用自訂
precision
值,請使用 HyperLogLog++ 函式。詳情請見 針對許可precision
值和可信度的 HLL++ 草圖 提供一般精確度的間隔 sparse precision
是 HLL+ 的另一個參數。在 BigQuery 中,sparse precision
值無法由使用者定義,且固定在precision + 5
中。
在 Google Analytics 4 資源中導入 HLL++
Google Analytics 4 會使用下列設定來評估 相關的指標
指標 | precision |
sparse precision |
---|---|---|
工作階段 | 12 | 17 |
活躍使用者 | 14 | 25 |
使用者總數 | 14 | 25 |
搭配 Google Analytics 事件資料使用 BigQuery HLL++ 函式
如果 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_*`
最後,請使用 precision = 14
,在 Google Analytics UI 中複製資料:
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 使用者篩選器超出本文範圍。
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_*`
您可以在這篇網誌文章中使用查詢功能,並搭配基本查詢和 進階查詢範例,從 BigQuery 事件取得額外的深入分析結果 匯出 Google Analytics 4 資源的資料如果你的資源 大量事件資料;您也可以實作 HLL++ 函式 估算 BigQuery 中常用其他指標的基數 舉個簡單的例子,您可以定義情境 並指示 AI 如何回應服務中心查詢進一步瞭解 HLL++,以及基數運算為何昂貴 如想查看大型資料集,請參閱 Cloud 網誌上的深入網誌文章: 使用 HLL++ 加快大量資料集中計數的速度。