HyperLogLog++函數為近似彙總函式,當資料量非常大時,能夠使用較小的記憶體空間快速完成資料去重,加速查詢。本文介紹HyperLogLog++相關函數。
背景資訊
HyperLogLog(簡稱HLL)是一種高效的近似去重演算法,適用於對精度要求不高的情境(如PV/UV統計),可作為 COUNT(DISTINCT) 的輕量級替代方案。與Bitmap等精確去重方法不同,HLL內部採用固定大小的資料結構(sketch),其記憶體佔用不隨資料量增長而擴大。每次新資料流入時,僅需計算一次Hash。在巨量資料量的情境下,HLL的去重誤差通常控制在1%以內,甚至更低,兼顧了效率與可用性。
為滿足基礎近似去重需求,MaxCompute提供了彙總函式APPROX_DISTINCT。隨著業務情境不斷豐富,越來越多使用者希望不僅能輸出最終去重結果,還能儲存或複用中間的sketch資料結構。為此,MaxCompute進一步支援完整的HyperLogLog++函數集,並對底層演算法進行了最佳化。在降低記憶體佔用的同時,進一步提升了估算精度,更好地支撐複雜分析情境。
以下列舉兩個HLL的典型適用情境:
需按時間維度反覆查詢的情境:通過持久化每日產生的 HLL sketch,後續計算僅需處理當天新增資料,並與歷史 sketch 合并,無需重複掃描全量歷史資料,顯著提升查詢效率。
對多個同類型列進行聯合去重的情境:可分別為各列構建並保留對應的 sketch,後續直接在 sketch 層面執行合并(merge)操作,實現去重結果的高效複用,大幅降低計算開銷。
函數列表
MaxCompute SQL支援的HyperLogLog++函數如下。
函數 | 功能 |
將相同類型的值彙總成一個新的HLL++ sketch。 | |
合并儲存類型相同的多個 HLL++ sketch成一個新的sketch。 | |
從一個HLL++ sketch計算得到基數估計值。 | |
合并儲存類型相同的多個 HLL++ sketch成一個新的sketch,並返回合并後sketch的基數估算值。 |
注意事項
HLL_COUNT_EXTRACT/HLL_COUNT_MERGE/HLL_COUNT_MERGE_PARTIAL函數使用的BINARY資料需要來源於HLL_COUNT_INIT函數, 不能來源於其他系統或者其他方式。