本文介绍数学计算函数的基本语法和示例。
日志服务支持如下数学计算函数。
-
支持如下运算符:
+-*/%
其中,使用运算符/时,默认不保留小数部分。您可通过
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) -
查询和分析结果
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 -
查询和分析结果
-