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 -
查詢和分析結果:查詢結果返回
Time和UV兩列,其中Time列為按分鐘截斷的時間戳記,UV列為approx_set函數返回的近似集合編碼字串,共 16 條記錄。
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 -
查詢和分析結果以表格形式展示 Time 和 UV 兩列,按分鐘粒度列出各時間點的獨立訪客數,例如 2021-09-09 15:12:00 對應 UV 為 78、15:13:00 對應 UV 為 561 等。
empty_approx_set函數
empty_approx_set函數用於返回一個HyperLogLog類型的空值。最大標準誤差預設為0.01625。
文法
empty_approx_set()
傳回值類型
HyperLogLog類型。
樣本
返回一個HyperLogLog類型的空值。
-
查詢和分析語句
* | SELECT empty_approx_set() -
查詢和分析結果返回結果為單列
_col0,值為AgwAAA==(Base 64 編碼的空 ApproxSet)。
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 ) -
查詢和分析結果。查詢結果樣本:每分鐘 UV 值分別為 561、658、625、852、594、644、562、607、611 等,全域 Total_UV 為 8564,所有行的 Total_UV 值相同。