本文介紹數學計算函數的基本文法和樣本。
Log Service支援如下數學計算函數。
-
支援如下運算子:
+-*/%
其中,使用運算子/時,預設不保留小數部分。您可通過
x*1.0/y運算,保留小數部分。 -
在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status或"status"表示日誌欄位status。
|
函數名稱 |
文法 |
說明 |
支援SQL |
支援SPL |
|
abs(x) |
計算x的絕對值。 |
√ |
√ |
|
|
acos(x) |
計算x的反餘弦。 |
√ |
√ |
|
|
asin(x) |
計算x的反正弦。 |
√ |
√ |
|
|
atan(x) |
計算x的反正切。 |
√ |
√ |
|
|
atan2(x, y) |
計算x和y相除的結果的反正切。 |
√ |
√ |
|
|
cbrt(x) |
計算x的立方根。 |
√ |
√ |
|
|
ceil(x) |
對x進行向上取整數。 ceil函數是ceiling函數的別名。 |
√ |
√ |
|
|
ceiling(x) |
對x進行向上取整數。 |
√ |
√ |
|
|
cos(x) |
計算x的餘弦。 |
√ |
√ |
|
|
cosh(x) |
計算x的雙曲餘弦。 |
√ |
√ |
|
|
cosine_similarity(x, y) |
計算x和y之間的餘弦相似性。 |
√ |
× |
|
|
degrees(x) |
將弧度轉換為度。 |
√ |
√ |
|
|
e() |
返回自然底數e的值。 |
√ |
√ |
|
|
exp(x) |
計算自然底數e的x次冪。 |
√ |
× |
|
|
floor(x) |
對x進行向下取整數。 |
√ |
√ |
|
|
from_base(x, y) |
根據BASE編碼將x轉為y進位的數字。 |
√ |
√ |
|
|
ln(x) |
計算x的自然對數。 |
√ |
√ |
|
|
infinity() |
返回正無窮的數值。 |
√ |
√ |
|
|
is_nan(x) |
判斷x是否為NaN。 |
√ |
√ |
|
|
log2(x) |
計算x以2為底的對數。 |
√ |
√ |
|
|
log10(x) |
計算x以10為底的對數。 |
√ |
√ |
|
|
log(x, y) |
計算x以y為底的對數。 |
√ |
× |
|
|
mod(x, y) |
計算x與y相除的餘數。 |
√ |
√ |
|
|
nan() |
返回一個NaN值。 |
√ |
√ |
|
|
pi() |
返回π值,精確到小數點後15位。 |
√ |
√ |
|
|
pow(x, y) |
計算x的y次冪。 pow函數是power函數的別名。 |
√ |
√ |
|
|
power(x, y) |
計算x的y次冪。 |
√ |
√ |
|
|
radians(x) |
將度轉換為弧度。 |
√ |
√ |
|
|
rand() |
返回隨機數。 |
√ |
√ |
|
|
random() |
返回[0,1)之間的隨機數。 |
√ |
√ |
|
|
random(x) |
返回[0,x)之間的隨機數。 |
√ |
√ |
|
|
round(x) |
對x進行四捨五入取整數。 |
√ |
√ |
|
|
round(x, n) |
對x進行四捨五入且保留n位小數。 |
√ |
√ |
|
|
sign(x) |
返回x的符號,通過1、0、-1表示。 |
√ |
× |
|
|
sin(x) |
計算x的正弦。 |
√ |
√ |
|
|
sqrt(x) |
計算x的平方根。 |
√ |
√ |
|
|
tan(x) |
計算x的正切。 |
√ |
√ |
|
|
tanh(x) |
計算x的雙曲正切。 |
√ |
√ |
|
|
to_base(x, y) |
根據BASE編碼將x轉為y進位的字串。 |
√ |
× |
|
|
truncate(x) |
截斷x的小數部分。 |
√ |
√ |
|
|
width_bucket(x, bound1, bound2, numBuckets) |
將一段數值範圍劃分成大小相同的多個Bucket,然後返回x所屬的Bucket。 |
√ |
× |
|
|
width_bucket(x, bins) |
使用數組指定Bucket的範圍,然後返回x所屬的Bucket。 |
√ |
× |
abs函數
abs函數用於計算x的絕對值。
文法
abs(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為smallint類型、integer類型、real類型、tinyint類型、bigint類型、double類型或decimal類型。 |
傳回值類型
與參數值的類型一致。
樣本
計算-25的絕對值。
-
查詢和分析語句
* | select abs(-25) -
查詢和分析結果:傳回值為 25。
acos函數
acos函數用於計算x的反餘弦。
文法
acos(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型,取值範圍為[-1,1]。 如果超出[-1,1],則返回NaN。 |
傳回值類型
double類型。
樣本
計算45°角的反餘弦。
-
查詢和分析語句
* | SELECT acos(pi()/4) -
查詢和分析結果:傳回值為 0.6674572160283838。
asin函數
asin函數用於計算x的反正弦。
文法
asin(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型,取值範圍為[-1,1]。 如果超出[-1,1],則返回NaN。 |
傳回值類型
double類型。
樣本
計算45°角的反正弦。
-
查詢和分析語句
* | SELECT asin(pi()/4) -
查詢和分析結果:傳回值為 0.6674572160283838。
atan函數
atan函數用於計算x的反正切。
文法
atan(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算45°角的反正切。
-
查詢和分析語句
* | SELECT atan(pi()/4) -
查詢和分析結果:傳回值為 0.6657737500283538。
atan2函數
atan2函數用於計算x和y相除的結果的反正切。
文法
atan2(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
|
y |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算30°角的反正切。
-
查詢和分析語句
* | SELECT atan2(pi(),6) -
查詢和分析結果:傳回值為 0.48234790710102495。
cbrt函數
cbrt函數用於計算x的立方根。
文法
cbrt(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算100的立方根。
-
查詢和分析語句
* | select cbrt(100) -
查詢和分析結果:傳回值為 4.641588833612779。
ceil函數
ceil函數用於對x進行向上取整數。ceil函數是ceiling函數的別名。
文法
ceil(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為tinyint、smallint、integer、real、bigint、double、decimal類型 。
|
傳回值類型
與參數值的類型一致。
樣本
對request_time欄位的值進行向上取整數。
-
欄位範例
request_time:9.3 -
查詢和分析語句
* | SELECT ceil(request_time) AS request_time -
查詢和分析結果:request_time 列的值為 10.0。
ceiling函數
ceiling函數用於對x進行向上取整數。
文法
ceiling(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為tinyint、smallint、integer、real、bigint、double、decimal類型 。
|
傳回值類型
與參數值的類型一致。
樣本
對request_time欄位的值進行向上取整數。
-
欄位範例
request_time:9.3 -
查詢和分析語句
* | SELECT ceiling(request_time) AS request_time -
查詢和分析結果:request_time 列的值為 10.0。
cos函數
cos函數用於計算x的餘弦。
文法
cos(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算30°角的餘弦。
-
查詢和分析語句
* | SELECT cos(pi()/6) -
查詢和分析結果:傳回值為 0.8660254037844387。
cosh函數
cosh函數用於計算x的雙曲餘弦。
文法
cosh(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算30°角的雙曲餘弦。
-
查詢和分析語句
* | SELECT cosh(pi()/6) -
查詢和分析結果:傳回值為 1.1402383210764287。
cosine_similarity函數
cosine_similarity函數用於計算x和y之間的餘弦相似性。
文法
cosine_similarity(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為map(varchar,double)類型。 |
|
y |
參數值為map(varchar,double)類型。 |
傳回值類型
double類型。
樣本
計算兩個向量之間的餘弦相似性。
-
查詢和分析語句
* | SELECT cosine_similarity(MAP(ARRAY['a'], ARRAY[1.0]), MAP(ARRAY['a'], ARRAY[2.0])) -
查詢和分析結果:傳回值為 1.0。
degrees函數
degrees函數用於將弧度轉換為度。
文法
degrees(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
將弧度π轉換為度。
-
查詢和分析語句
* | SELECT degrees(pi()) -
查詢和分析結果:傳回值為 180.0。
e函數
e函數用於返回自然底數e的值。
文法
e()
傳回值類型
double類型。
樣本
返回自然底數e的值。
-
查詢和分析語句
* | SELECT e() -
查詢和分析結果:傳回值為 2.718281828459045。
exp函數
exp函數用於計算自然底數e的x次冪。
文法
exp(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算自然底數e的3次冪。
-
查詢和分析語句
* | SELECT exp(3) -
查詢和分析結果:傳回值為 20.085536923187669。
floor函數
floor函數用於對x進行向下取整數。
文法
floor(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為tinyint、smallint、integer、real、bigint、double、decimal類型 。
|
傳回值類型
double類型。
樣本
對request_time欄位的值進行向下取整數。
-
欄位範例
request_time:10.3 -
查詢和分析語句
* | SELECT floor(request_time) AS request_time -
查詢和分析結果:request_time 列的值為 10.0。
from_base函數
from_base函數返回將字串x以y進位解釋得到的數值。
文法
from_base(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為varchar類型。 |
|
y |
參數值為bigint類型。進位,取值範圍為[2,36]。 |
傳回值類型
bigint類型。
樣本
將字串1101轉換為數字。
-
查詢和分析語句
* | SELECT from_base('1101',2) -
查詢和分析結果:傳回值為 13。
ln函數
ln函數用於計算x的自然對數。
文法
ln(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型且大於0。 |
傳回值類型
double類型。
樣本
計算2的自然對數。
-
查詢和分析語句
* | SELECT ln(2) -
查詢和分析結果:傳回值為 0.6931471805599453。
infinity函數
infinity函數用於返回正無窮的數值。
文法
infinity()
傳回值類型
double類型。
樣本
用於返回正無窮的數值。
-
查詢和分析語句
* | SELECT infinity() -
查詢和分析結果:傳回值為 Infinity。
is_nan函數
is_nan函數用於判斷x是否為NaN。如果是,則返回true。
文法
is_nan(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
boolean類型。
樣本
判斷status欄位的值是否為NaN。
-
查詢和分析語句
* | SELECT is_nan(status) -
查詢和分析結果:傳回值為 false。
log2函數
log2函數用於計算x以2為底的對數。
文法
log2(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算100以2為底的對數。
-
查詢和分析語句
* | SELECT log2(100) -
查詢和分析結果:傳回值為 6.643856189774725。
log10函數
log10函數用於計算x以10為底的對數。
文法
log10(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算100以10為底的對數。
-
查詢和分析語句
* | SELECT log10(100) -
查詢和分析結果:傳回值為 2.0。
log函數
log函數用於計算x以y為底數的對數。
文法
log(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
|
y |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算100以5為底數的對數。
-
查詢和分析語句
* | SELECT log(100,5) -
查詢和分析結果:傳回值為 2.8265747590288146。
mod函數
mod函數用於計算x與y相除的餘數。
文法
mod(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為tinyint、smallint、integer、real、bigint、double、decimal類型。 |
|
y |
參數值為tinyint、smallint、integer、real、bigint、double、decimal類型。 |
傳回值類型
與參數值的資料類型一致。
樣本
計算100與30相除的餘數。
-
查詢和分析語句
* | SELECT mod(100,30) -
查詢和分析結果:傳回值為 10。
nan函數
nan函數用於返回一個NaN值(Not a Number)。
文法
nan()
傳回值類型
double類型。
樣本
返回一個NaN值。
-
查詢和分析語句
* | SELECT nan() -
查詢和分析結果:傳回值為 NaN。
pi函數
pi函數用於返回π值,精確到小數點後15位。
文法
pi()
傳回值類型
double類型。
樣本
返回π值,精確到小數點後15位。
-
查詢和分析語句
* | SELECT pi() -
查詢和分析結果:傳回值為 3.141592653589793。
pow函數
pow函數用於計算x的y次冪。pow函數是power函數的別名。
文法
pow(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
|
y |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算2的5次冪。
-
查詢和分析語句
* | SELECT pow(2,5) -
查詢和分析結果:傳回值為 32.0。
power函數
power用於計算x的y次冪。
文法
power(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
|
y |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算2的5次冪。
-
查詢和分析語句
* | SELECT power(2,5) -
查詢和分析結果:傳回值為 32.0。
radians函數
radians函數用於將度轉換為弧度。
文法
radians(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算180°對應的弧度。
-
查詢和分析語句
* | SELECT radians(180) -
查詢和分析結果:傳回值為 3.141592653589793。
rand函數
rand函數用於返回隨機數。
文法
rand()
傳回值類型
double類型。
樣本
返回一個隨機數。
-
查詢和分析語句
* | select rand() -
查詢和分析結果:返回一個隨機值,例如 0.8742241064002435。
random函數
random函數用於返回[0,x)之間的隨機數。
文法
-
返回[0,1)之間的隨機數。
random() -
返回[0,x)之間的隨機數。
random(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為tinyint、smallint、integer或bigint類型。 |
傳回值類型
與參數值的類型一致。
樣本
返回[0,100)之間的隨機數。
-
查詢和分析語句
* | select random(100) -
查詢和分析結果:返回一個隨機整數,例如 44。
round函數
round函數用於對x進行四捨五入。如果n存在,則保留n位小數;如果n不存在,則對x進行四捨五入取整數。
文法
-
對x進行四捨五入取整數。
round(x) -
對x進行四捨五入且保留n位小數。
round(x, n)
參數說明
|
參數 |
說明 |
|
x |
參數值為tinyint、smallint、integer或bigint類型。 |
|
n |
n位小數。 |
傳回值類型
與參數值的資料類型一致。
樣本
同比今天與昨天的訪問PV,並使用百分數表示。
-
查詢和分析語句
* | SELECT diff [1] AS today, round((diff [3] -1.0) * 100, 2) AS growth FROM (SELECT compare(pv, 86400) as diff FROM (SELECT COUNT(*) as pv FROM website_log)) -
查詢和分析結果:today 列的值為 1564075.0,growth 列的值為 -22.11。
sign函數
sign函數用於返回x的符號,通過1、0、-1表示。
文法
sign(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為integer、smallint、tinyint、real、 double、bigint或decimal(p,s)類型。
|
傳回值類型
與參數值的資料類型一致。
樣本
計算數字10的符號。
-
查詢和分析語句
* | SELECT sign(10) -
查詢和分析結果:傳回值為 1。
sin函數
sin函數用於計算x的正弦。
文法
sin(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算90°角的正弦。
-
查詢和分析語句
* | select sin(pi()/2) -
查詢和分析結果:傳回值為 1.0。
sqrt函數
sqrt函數用於計算x的平方根。
文法
sqrt(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算100的平方根。
-
查詢和分析語句
* | select sqrt(100) -
查詢和分析結果:傳回值為 10.0。
tan函數
tan函數用於計算x的正切。
文法
tan(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算tan30°角的正切。
-
查詢和分析語句
* | SELECT tan(pi()/6) -
查詢和分析結果:傳回值為 0.5773502691896257。
tanh函數
tanh函數用於計算x的雙曲正切。
文法
tanh(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
計算30°的雙曲正切。
-
查詢和分析語句
* | SELECT tanh(pi()/6) -
查詢和分析結果:傳回值為 0.4804727781564516。
to_base函數
to_base函數將根據BASE編碼將x轉為y進位的字串。
文法
to_base(x, y)
參數說明
|
參數 |
說明 |
|
x |
參數值為bigint類型。 |
|
y |
參數值為bigint類型。進位,取值範圍為[2,36]。 |
傳回值類型
varchar類型。
樣本
將180轉換為二進位字串。
-
查詢和分析語句
* | SELECT to_base(180, 2) -
查詢和分析結果:傳回值為 10110100。
truncate函數
truncate函數用於截斷x的小數部分。
文法
truncate(x)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
傳回值類型
double類型。
樣本
截斷11.11的小數部分。
-
查詢和分析語句
* | SELECT truncate(11.11) -
查詢和分析結果:傳回值為 11.0。
width_bucket函數
width_bucket函數用於返回x所屬的Bucket。
文法
-
將一段數值範圍劃分成大小相同的多個Bucket,然後返回x所屬的Bucket。
width_bucket(x, bound1, bound2, numBuckets) -
使用數組指定Bucket的範圍,然後返回x所屬的Bucket。
width_bucket(x, bins)
參數說明
|
參數 |
說明 |
|
x |
參數值為double類型。 |
|
bound1 |
提供數值範圍的下限。 |
|
bound2 |
提供數值範圍的上限。 |
|
numBuckets |
Bucket數量。大於0的整數。 |
|
bins |
使用數組指定Bucket的範圍。bins為double類型的數組。 |
傳回值類型
bigint類型。
-
x在指定範圍內,返回x的所屬的Bucket。
-
x在下限範圍外,返回0。
-
x在上限範圍外,返回numBuckets+1。
樣本
-
樣本1:將[10,80)範圍等分為7個Bucket,然後返回request_time欄位的各個值所屬的Bucket。
-
查詢和分析語句
* | SELECT request_time, width_bucket(request_time, 10, 80,7) AS numBuckets -
查詢和分析結果:返回結果包含 request_time 和 numBuckets 兩列,顯示各請求時間對應的分桶編號,例如 request_time 為 26.0 時 numBuckets 為 2,request_time 為 49.0 時 numBuckets 為 4。
-
-
樣本2:使用數組指定7個Bucket的範圍,然後返回request_time欄位的各個值所屬的Bucket。
-
查詢和分析語句
* | SELECT request_time, width_bucket(request_time, array[10,20,30,40,50,60,70,80]) AS numBuckets -
查詢和分析結果:返回結果包含 request_time 和 numBuckets 兩列,顯示各請求時間按自訂邊界數組分配的桶編號,例如 request_time 為 26.0 時 numBuckets 為 2,request_time 為 54.0 時 numBuckets 為 5。
-