HyperLogLog函數為近似彙總函式,類似於approx_distinct函數。當計算的資料量非常大時,使用HyperLogLog函數可快速返回估算結果。本文介紹HyperLogLog函數的基本文法以及樣本。
Log Service支援如下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 )
查詢和分析結果