本文介紹估算函數的基本文法及樣本。
Log Service支援如下估算函數。
|
函數名稱 |
文法 |
說明 |
支援SQL |
支援SPL |
|
approx_distinct(x) |
估算x中不重複值的個數,預設存在2.3%的標準誤差。 |
√ |
× |
|
|
approx_distinct(x, e) |
估算x中不重複值的個數,支援自訂標準誤差。 |
√ |
× |
|
|
approx_percentile(x, percentage) |
對x進行正序排列,返回大約處於percentage位置的x。最終的結果是近似結果,不保證穩定性和一致性。 |
√ |
× |
|
|
approx_percentile(x, array[percentage01, percentage02...]) |
對x進行正序排列,返回大約處於percentage01、percentage02位置的x。最終的結果是近似結果,不保證穩定性和一致性。 |
√ |
× |
|
|
approx_percentile(x, weight, percentage) |
對x和權重的乘積進行正序排列,返回大約處於percentage位置的x。最終的結果是近似結果,不保證穩定性和一致性。 |
√ |
× |
|
|
approx_percentile(x, weight, array[percentage01, percentage02...]) |
對x和權重的乘積進行正序排列,返回大約處於percentage01、percentage02位置的x。最終的結果是近似結果,不保證穩定性和一致性。 |
√ |
× |
|
|
approx_percentile(x, weight, percentage, accuracy) |
對x和權重的乘積進行正序排列,返回大約處於percentage位置的x。支援設定返回結果的準確度。最終的結果是近似結果,不保證穩定性和一致性。 |
√ |
× |
|
|
numeric_histogram(bucket, x) |
按照bucket數量(長條圖列數),統計x的近似長條圖,返回結果為JSON類型。 |
√ |
× |
|
|
numeric_histogram(bucket, x, weight) |
按照bucket數量(長條圖列數),統計x的近似長條圖,返回結果為JSON類型。支援對x設定權重。 |
√ |
× |
|
|
numeric_histogram_u(bucket, x) |
按照bucket數量(長條圖列數),統計x的近似長條圖,返回結果為多行多列格式。 |
√ |
× |
|
|
approx_most_frequent(k, x) |
估算x列最常出現的 |
√ |
× |
approx_distinct函數
approx_distinct函數用於估算x中不重複值的個數。
文法
-
估算x中不重複值的個數,預設存在2.3%的標準誤差。
approx_distinct(x) -
估算x中不重複值的個數,支援自訂標準誤差。
approx_distinct(x, e)
參數說明
|
參數 |
說明 |
|
x |
參數值為任意資料類型。 |
|
e |
自訂標準誤差,取值為[0.0115, 0.26]。 |
傳回值類型
bigint類型。
樣本
-
樣本1:使用countFunction ComputePV,使用approx_distinct函數估算不重複的client_ip欄位值作為UV,標準誤差為2.3%。
-
查詢和分析語句
* |SELECT count(*) AS PV, approx_distinct(client_ip) AS UV -
查詢和分析結果返回 PV 為 941787,UV 為 723040。
-
-
樣本2:使用countFunction ComputePV,使用approx_distinct函數估算不重複的client_ip欄位值作為UV,自訂標準誤差為10%。
-
查詢和分析語句
* |SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV -
查詢和分析結果返回 PV 為 9095,UV 為 7946。
-
approx_percentile函數
approx_percentile函數用於對x進行正序排列,返回大約處於percentage位置的數值。最終的結果是近似結果,不保證穩定性和一致性。
文法
-
對x進行正序排列,返回處於percentage位置的x,返回結果為double類型。
approx_percentile(x, percentage) -
對x進行正序排列,返回處於percentage01、percentage02位置的x,返回結果為array(double,double)類型。
approx_percentile(x, array[percentage01, percentage02...]) -
對x和權重的乘積進行正序排列,返回大約處於percentage位置的x,返回結果為double類型。
approx_percentile(x, weight, percentage) -
對x和權重的乘積進行正序排列,返回處於percentage01、percentage02位置的x,返回結果為array(double,double)類型。
approx_percentile(x, weight, array[percentage01, percentage02...]) -
對x和權重的乘積進行正序排列,返回大約處於percentage位置的x,返回結果為double類型。支援設定返回結果的準確度。
approx_percentile(x, weight, percentage, accuracy)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
|
percentage |
百分比值,取值範圍為[0,1]。 |
|
accuracy |
準確度,取值範圍為(0,1)。 |
|
weight |
權重,大於1的整數。 設定權重後,系統根據x與權重的乘積進行排序。 |
傳回值類型
double類型或array(double,double)類型。
樣本
-
樣本1:對request_time列進行排序後,返回大約處於50%位置的request_time欄位的值。
-
查詢和分析語句
*| SELECT approx_percentile(request_time,0.5) -
查詢和分析結果返回單列 _col0,值為
45.0,表示request_time的中位元(第 50 百分位)為 45.0。
-
-
樣本2:對request_time列進行排序後,返回處於10%、20%及70%位置的request_time欄位的值。
-
查詢和分析語句
*| SELECT approx_percentile(request_time,array[0.1,0.2,0.7]) -
查詢和分析結果為
[17.0,24.0,59.0],即request_time在第 10、20、70 百分位的近似值分別為 17.0、24.0、59.0。
-
-
樣本3:根據request_time與權重的乘積對request_time列進行排序後,返回大約處於50%位置的request_time欄位的值。其中,request_time<20時權重為100,否則權重為10。
-
查詢和分析語句
* | SELECT approx_percentile( request_time,case when request_time < 20 then 100 else 10 end, 0.5 ) -
查詢和分析結果為單列
_col0,傳回值為18.0。
-
-
樣本4:根據request_time與權重的乘積對request_time列進行排序後,返回大約處於80%和90%位置的request_time欄位的值。其中,request_time<20時權重為100,否則權重為10。
-
查詢和分析語句
* | SELECT approx_percentile( request_time,case when request_time < 20 then 100 else 10 end, array [0.8,0.9] ) -
查詢和分析結果返回單列
_col0,值為[48.0,64.0]。
-
-
樣本5:根據request_time與權重的乘積對request_time列進行排序後,返回大約處於50%位置的request_time欄位的值,準確度為0.2。其中,request_time<20時權重為100,否則權重為10。
-
查詢和分析語句
* | SELECT approx_percentile( request_time,case when request_time < 20 then 100 else 10 end, 0.5, 0.2 )
-
numeric_histogram函數
numeric_histogram函數按照bucket數量(長條圖列數),統計x的近似長條圖。返回結果為JSON類型。
文法
-
按照bucket數量(長條圖列數),統計x的近似長條圖。
numeric_histogram(bucket, x) -
按照bucket數量(長條圖列數),統計x的近似長條圖。支援為x設定權重。
numeric_histogram(bucket, x, weight)
參數說明
|
參數 |
說明 |
|
bucket |
長條圖中列的個數,bigint類型。 |
|
x |
參數值為double類型。 |
|
weight |
權重,大於0的整數。 設定權重後,系統根據x與權重的乘積進行分組。 |
傳回值類型
JSON類型。
樣本
-
樣本1:統計POST方法對應的請求時間長度的近似長條圖。
-
查詢和分析語句
request_method:POST | SELECT numeric_histogram(10,request_time) -
查詢和分析結果:查詢結果返回一個 JSON 對象,其中鍵為長條圖各分桶的邊界值(如
"45.03638445951907"、"31.617058096415327"、"51.0979254315973"),值為對應桶內的記錄數(如 11351.0、16180.0、13786.0)。
-
-
樣本2:根據request_time與權重的乘積對請求時間長度進行分組,從而統計POST方法對應的請求時間長度的近似長條圖。
-
查詢和分析語句
request_method:POST| SELECT numeric_histogram(10, request_time,case when request_time<20 then 100 else 10 end) -
查詢和分析結果為一列
_col0,傳回值為 JSON 格式的索引值對,包含 10 組數值區間與對應頻次的映射,例如"60.63632633267428":268070.0、"76.41340599455032":275250.0、"15.028066666666671":1500000.0等。
-
numeric_histogram_u函數
numeric_histogram_u函數按照bucket數量(長條圖列數),統計x的近似長條圖。返回結果為多行多列格式。
文法
numeric_histogram_u(bucket, x)
參數說明
|
參數 |
說明 |
|
bucket |
長條圖中列的個數,bigint類型。 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
統計POST方法對應的請求時間長度的近似長條圖。
-
查詢和分析語句
request_method:POST | select numeric_histogram_u(10,request_time) -
查詢和分析結果:查詢結果返回
bucket_avg和count兩列,共 10 行資料,分別表示各分桶的平均值與對應計數。例如第一個分桶 bucket_avg 為 14.20,count 為 18806.0;最後一個分桶 bucket_avg 為 70.78,count 為 13442.0。
approx_most_frequent函數
估算x列最常出現的k個值以及每個值出現的近似次數
文法
approx_most_frequent(k, x)
參數說明
|
參數 |
說明 |
|
k |
出現次數最多的k個值,5表示最多返回top5個值對應的近似次數 |
|
x |
參數值為varchar類型。 |
傳回值類型
map(varchar, bigint)類型
樣本
擷取content欄位,出現頻率最高的3個值
-
欄位範例
content: 'A' 'B' 'A' 'C' 'A' 'B' 'C' 'D' 'E' -
查詢和分析語句
select approx_most_frequent(3, content) -
輸出資料
查詢返回一行資料,列名為
_col0,值為{"A":3,"B":2,"C":2}。