本文介绍数学计算函数的基本语法和示例。
日志服务支持如下数学计算函数。
-
支持如下运算符:
+-*/%
其中,使用运算符/时,默认不保留小数部分。您可通过
x*1.0/y运算,保留小数部分。 -
在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'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。
-