HyperLogLog函數為近似聚合函數,類似于approx_distinct函數。當計算的數據量非常大時,使用HyperLogLog函數可快速返回估算結果。本文介紹HyperLogLog函數的基本語法以及示例。
日志服務支持如下HyperLogLog函數。
函數名稱 | 語法 | 說明 | 支持SQL | 支持SPL |
approx_set(x) | 估算x中不重復值的個數,最大標準誤差默認為0.01625。 | √ | × | |
cardinality(x) | 將HyperLogLog類型的內容轉換為bigint類型。 | √ | × | |
empty_approx_set() | 返回一個HyperLogLog類型的空值。最大標準誤差默認為0.01625。 | √ | × | |
merge(x) | 聚合計算所有的HyperLogLog值。 | √ | × |
approx_set函數
approx_set函數用于估算x中不重復值的個數,最大標準誤差默認為0.01625。
語法
approx_set(x)
參數說明
參數 | 說明 |
x | 參數值為任意數據類型。 |
返回值類型
HyperLogLog類型。
示例
使用approx_set函數估算每分鐘的網站訪問UV,返回結果為HyperLogLog編碼格式。
查詢和分析語句
* | SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM website_log GROUP BY Time ORDER BY Time
查詢和分析結果
cardinality函數
cardinality函數用于將HyperLogLog類型的內容轉換為bigint類型。
語法
cardinality(x)
參數說明
參數 | 說明 |
x | 參數值為HyperLogLog類型。 |
返回值類型
bigint類型。
示例
使用approx_set函數估算每分鐘的網站訪問UV,返回結果為HyperLogLog類型。然后使用cardinality函數將HyperLogLog類型轉換為bigint類型。
查詢和分析語句
* | SELECT Time, cardinality(UV) AS UV FROM ( SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM website_log GROUP BY Time ORDER BY Time ) AS UV
查詢和分析結果
empty_approx_set函數
empty_approx_set函數用于返回一個HyperLogLog類型的空值。最大標準誤差默認為0.01625。
語法
empty_approx_set()
返回值類型
HyperLogLog類型。
示例
返回一個HyperLogLog類型的空值。
查詢和分析語句
* | SELECT empty_approx_set()
查詢和分析結果
merge函數
merge函數用于聚合計算所有的HyperLogLog值。
語法
merge(x)
參數說明
參數 | 說明 |
x | 參數值為HyperLogLog類型。 |
返回值類型
HyperLogLog類型。
示例
使用approx_set函數估算每分鐘的網站訪問UV,使用merge函數聚合計算15分鐘內所有的UV,然后使用cardinality函數將HyperLogLog類型轉換為bigint類型。
查詢和分析語句
* | SELECT Time, cardinality(UV) AS UV, cardinality(merge(UV) over()) AS Total_UV FROM ( SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM log GROUP BY Time ORDER BY Time )
查詢和分析結果