本文介绍数学计算函数的基本语法和示例。
日志服务支持如下数学计算函数。
支持如下运算符:
+-*/%
其中,使用运算符/时,默认不保留小数部分。您可通过
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_bucke(x, bound1, bound2, numBuckets) | 将一段数值范围划分成大小相同的多个Bucket,然后返回x所属的Bucket。 | √ | × | |
width_bucke(x, bins) | 使用数组指定Bucket的范围,然后返回x所属的Bucket。 | √ | × |
abs函数
abs函数用于计算x的绝对值。
语法
abs(x)
参数说明
参数 | 说明 |
x | 参数值为smallint类型、integer类型、real类型、tinyint类型、bigint类型、double类型或decimal类型。 |
返回值类型
与参数值的类型一致。
示例
计算-25的绝对值。
查询和分析语句
* | select abs(-25)
查询和分析结果
acos函数
acos函数用于计算x的反余弦。
语法
acos(x)
参数说明
参数 | 说明 |
x | 参数值为double类型,取值范围为[-1,1]。 如果超出[-1,1],则返回NaN。 |
返回值类型
double类型。
示例
计算45°角的反余弦。
查询和分析语句
* | SELECT acos(pi()/4)
查询和分析结果
asin函数
asin函数用于计算x的反正弦。
语法
asin(x)
参数说明
参数 | 说明 |
x | 参数值为double类型,取值范围为[-1,1]。 如果超出[-1,1],则返回NaN。 |
返回值类型
double类型。
示例
计算45°角的反正弦。
查询和分析语句
* | SELECT asin(pi()/4)
查询和分析结果
atan函数
atan函数用于计算x的反正切。
语法
atan(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算45°角的反正切。
查询和分析语句
* | SELECT atan(pi()/4)
查询和分析结果
atan2函数
atan2函数用于计算x和y相除的结果的反正切。
语法
atan2(x, y)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
y | 参数值为double类型。 |
返回值类型
double类型。
示例
计算30°角的反正切。
查询和分析语句
* | SELECT atan2(pi(),6)
查询和分析结果
cbrt函数
cbrt函数用于计算x的立方根。
语法
cbrt(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算100的立方根。
查询和分析语句
* | select cbrt(100)
查询和分析结果
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
查询和分析结果
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
查询和分析结果
cos函数
cos函数用于计算x的余弦。
语法
cos(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算30°角的余弦。
查询和分析语句
* | SELECT cos(pi()/6)
查询和分析结果
cosh函数
cosh函数用于计算x的双曲余弦。
语法
cosh(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算30°角的双曲余弦。
查询和分析语句
* | SELECT cosh(pi()/6)
查询和分析结果
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]))
查询和分析结果
degrees函数
degrees函数用于将弧度转换为度。
语法
degrees(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
将弧度π转换为度。
查询和分析语句
* | SELECT degrees(pi())
查询和分析结果
e函数
e函数用于返回自然底数e的值。
语法
e()
返回值类型
double类型。
示例
返回自然底数e的值。
查询和分析语句
* | SELECT e()
查询和分析结果
exp函数
exp函数用于计算自然底数e的x次幂。
语法
exp(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算自然底数e的3次幂。
查询和分析语句
* | SELECT exp(3)
查询和分析结果
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
查询和分析结果
from_base函数
from_base函数返回将字符串x以y进制解释得到的数值。
语法
from_base(x, y)
参数说明
参数 | 说明 |
x | 参数值为varchar类型。 |
y | 参数值为bigint类型。进制,取值范围为[2,36]。 |
返回值类型
bigint类型。
示例
将字符串1101转换为数字。
查询和分析语句
* | SELECT from_base('1101',2)
查询和分析结果
ln函数
ln函数用于计算x的自然对数。
语法
ln(x)
参数说明
参数 | 说明 |
x | 参数值为double类型且大于0。 |
返回值类型
double类型。
示例
计算2的自然对数。
查询和分析语句
* | SELECT ln(2)
查询和分析结果
infinity函数
infinity函数用于返回正无穷的数值。
语法
infinity()
返回值类型
double类型。
示例
用于返回正无穷的数值。
查询和分析语句
* | SELECT infinity()
查询和分析结果
is_nan函数
is_nan函数用于判断x是否为NaN。如果是,则返回true。
语法
is_nan(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
boolean类型。
示例
判断status字段的值是否为NaN。
查询和分析语句
* | SELECT is_nan(status)
查询和分析结果
log2函数
log2函数用于计算x以2为底的对数。
语法
log2(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算100以2为底的对数。
查询和分析语句
* | SELECT log2(100)
查询和分析结果
log10函数
log10函数用于计算x以10为底的对数。
语法
log10(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算100以10为底的对数。
查询和分析语句
* | SELECT log10(100)
查询和分析结果
log函数
log函数用于计算x以y为底数的对数。
语法
log(x, y)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
y | 参数值为double类型。 |
返回值类型
double类型。
示例
计算100以5为底数的对数。
查询和分析语句
* | SELECT log(100,5)
查询和分析结果
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)
查询和分析结果
nan函数
nan函数用于返回一个NaN值(Not a Number)。
语法
nan()
返回值类型
double类型。
示例
返回一个NaN值。
查询和分析语句
* | SELECT nan()
查询和分析结果
pi函数
pi函数用于返回π值,精确到小数点后15位。
语法
pi()
返回值类型
double类型。
示例
返回π值,精确到小数点后15位。
查询和分析语句
* | SELECT pi()
查询和分析结果
pow函数
pow函数用于计算x的y次幂。pow函数是power函数的别名。
语法
pow(x, y)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
y | 参数值为double类型。 |
返回值类型
double类型。
示例
计算2的5次幂。
查询和分析语句
* | SELECT pow(2,5)
查询和分析结果
power函数
power用于计算x的y次幂。
语法
power(x, y)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
y | 参数值为double类型。 |
返回值类型
double类型。
示例
计算2的5次幂。
查询和分析语句
* | SELECT power(2,5)
查询和分析结果
radians函数
radians函数用于将度转换为弧度。
语法
radians(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算180°对应的弧度。
查询和分析语句
* | SELECT radians(180)
查询和分析结果
rand函数
rand函数用于返回随机数。
语法
rand()
返回值类型
double类型。
示例
返回一个随机数。
查询和分析语句
* | select rand()
查询和分析结果
random函数
random函数用于返回[0,x)之间的随机数。
语法
返回[0,1)之间的随机数。
random()
返回[0,x)之间的随机数。
random(x)
参数说明
参数 | 说明 |
x | 参数值为tinyint、smallint、integer或bigint类型。 |
返回值类型
与参数值的类型一致。
示例
返回[0,100)之间的随机数。
查询和分析语句
* | select random(100)
查询和分析结果
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))
查询和分析结果
sign函数
sign函数用于返回x的符号,通过1、0、-1表示。
语法
sign(x)
参数说明
参数 | 说明 |
x | 参数值为integer、smallint、tinyint、real、 double、bigint或decimal(p,s)类型。
|
返回值类型
与参数值的数据类型一致。
示例
计算数字10的符号。
查询和分析语句
* | SELECT sign(10)
查询和分析结果
sin函数
sin函数用于计算x的正弦。
语法
sin(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算90°角的正弦。
查询和分析语句
* | select sin(pi()/2)
查询和分析结果
sqrt函数
sqrt函数用于计算x的平方根。
语法
sqrt(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算100的平方根。
查询和分析语句
* | select sqrt(100)
查询和分析结果
tan函数
tan函数用于计算x的正切。
语法
tan(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算tan30°角的正切。
查询和分析语句
* | SELECT tan(pi()/6)
查询和分析结果
tanh函数
tanh函数用于计算x的双曲正切。
语法
tanh(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
计算30°的双曲正切。
查询和分析语句
* | SELECT tanh(pi()/6)
查询和分析结果
to_base函数
to_base函数将根据BASE编码将x转为y进制的字符串。
语法
to_base(x, y)
参数说明
参数 | 说明 |
x | 参数值为bigint类型。 |
y | 参数值为bigint类型。进制,取值范围为[2,36]。 |
返回值类型
varchar类型。
示例
将180转换为二进制字符串。
查询和分析语句
* | SELECT to_base(180, 2)
查询和分析结果
truncate函数
truncate函数用于截断x的小数部分。
语法
truncate(x)
参数说明
参数 | 说明 |
x | 参数值为double类型。 |
返回值类型
double类型。
示例
截断11.11的小数部分。
查询和分析语句
* | SELECT truncate(11.11)
查询和分析结果
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
查询和分析结果
示例2:使用数组指定7个Bucket的范围,然后返回request_time字段的各个值所属的Bucket。
查询和分析语句
* | SELECT request_time, width_bucket(request_time, array[10,20,30,40,50,60,70,80]) AS numBuckets
查询和分析结果