跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

数学函数

本文介绍 GQL 支持的数学函数,分为以下几类:

基本函数

abs()

返回一个数的绝对值。

该函数还支持向量数据类型。更多信息,请参见向量函数abs()。

NULL 行为:默认

函数签名

abs(num: Numeric) -> Numeric

返回值的数据类型与num的数据类型相同。

示例

RETURN abs(3) AS intAbs, abs(-3.3) AS floatAbs

返回:

+--------+----------+
| intAbs | floatAbs |
+--------+----------+
| 3      | 3.3      |
+--------+----------+

mod()

返回除法运算的余数。

函数签名

mod(dividend: Numeric, divisor: Numeric) -> Numeric
  • dividend和divisor必须是相同的数据类型。
  • 返回值的数据类型与dividend的数据类型相同。

示例

RETURN mod(7,3) AS m

返回:

+---+
| m |
+---+
| 1 |
+---+

floor()

返回小于或等于给定数的最大整数或小数(小数部分为0)。

NULL 行为:默认

函数签名

floor(num: Numeric) -> Numeric

返回值的数据类型与num的数据类型相同。

示例

RETURN floor(1.3)

返回:

+------------+
| floor(1.3) |
+------------+
| 1          |
+------------+

ceil() 和 ceiling()

返回大于或等于给定数的最小整数或小数(小数部分为0)。

NULL 行为:默认

函数签名

ceil(num: Numeric) -> Numeric

或

ceiling(num: Numeric) -> Numeric

返回值的数据类型与num的数据类型相同。

示例

RETURN ceil(1.3) AS a

或

RETURN ceiling(1.3) AS a

返回:

+---+
| a |
+---+
| 2 |
+---+

round()

基于给定的精度对一个数进行四舍五入。

Null 行为:默认

函数签名

round(num: Numeric [, precision: INT32 ]) ->  DOUBLE | DECIMAL

如果num的数据类型为DECIMAL,则返回值的数据类型为DECIMAL;否则,返回值的数据类型为DOUBLE。

参数

  • num:要四舍五入的数。
  • precision:四舍五入的精度。

    • 如果省略,则默认为0,表示四舍五入到整数。
    • 如果指定为正数,则表示四舍五入到小数点右侧的位数。
    • 如果指定为负数,则表示四舍五入到小数点左侧的位数。

示例

RETURN round(4.5) AS a, round(4.55, 1) AS b, round(45, -1) AS c

返回:

+---+-----+----+
| a | b   | c  |
+---+-----+----+
| 5 | 4.6 | 50 |
+---+-----+----+

exp()

返回自然底数e的指定次幂。

该函数还支持向量数据类型。更多信息,请参见向量函数exp()。

NULL 行为:默认

函数签名

exp(num: Numeric) ->  DOUBLE | DECIMAL 

如果num的数据类型为DECIMAL,则返回值的数据类型为DECIMAL;否则,返回值的数据类型为DOUBLE。

示例

RETURN exp(1)

返回:

+-------------------+
| exp(1)            |
+-------------------+
| 2.718281828459045 |
+-------------------+

sign()

接受一个浮点数或整数作为输入,根据输入数值的正负性返回一个特定的整数值。如果输入为正数,返回值为1;如果输入为负数,返回值为-1;如果输入为0、-0.0或0.0,返回值为0。

NULL 行为:默认

函数签名

sign(num: Numeric) -> INT8

示例

输入为0
RETURN sign(0)

返回:

+---------+
| sign(0) |
+---------+
| 0       |
+---------+
输入为0.0
RETURN sign(-0.0)

返回:

+------------+
| sign(-(0)) |
+------------+
| 0          |
+------------+
输入为负数
RETURN sign(-0.34)

返回:

+-------------+
| sign(-0.34) |
+-------------+
| -1          |
+-------------+
输入为正数
RETURN sign(34)

返回:

+----------+
| sign(34) |
+----------+
| 1        |
+----------+

pi()

返回数学常数pi。

函数签名

pi() -> DOUBLE | FLOAT

示例

RETURN pi()

返回:

+-------------------+
| pi()              |
+-------------------+
| 3.141592653589793 |
+-------------------+

sqrt()

返回一个数的平方根。

该函数还支持向量数据类型。更多信息,请参见向量函数sqrt()。

NULL 行为:默认

函数签名

sqrt(num: Numeric) -> DOUBLE | DECIMAL

如果num的数据类型为DECIMAL,则返回值的数据类型为DECIMAL;否则,返回值的数据类型为DOUBLE。

示例

RETURN sqrt(3)

返回:

+--------------------+
| sqrt(3)            |
+--------------------+
| 1.7320508075688772 |
+--------------------+

power()

返回一个数的幂次运算结果。

NULL 行为:默认

函数签名

power(base: Numeric, exponent: Numeric) -> DOUBLE | DECIMAL
  • base和exponent必须是相同的数据类型。
  • 如果base的数据类型为DECIMAL,则返回值的数据类型为DECIMAL;否则,返回值的数据类型为DOUBLE。

示例

RETURN power(3,4)

返回:

+------------+
| power(3,4) |
+------------+
| 81.0       |
+------------+

isnan()

用于检查给定的数是否是NaN,是则返回TRUE,否则返回FALSE。NaN是一种特殊的浮点数值,用于表示未定义或不可表示的结果,例如,0/0或无效的数学操作。

NULL 行为:默认

函数签名

isnan(num: Numeric) -> BOOLEAN

示例

输入不是NaN
RETURN isnan(cosh(28))

返回:

+-----------------+
| isnan(cosh(28)) |
+-----------------+
| false           |
+-----------------+
输入是NaN
RETURN isnan(asin(radians(180)))

返回:

+---------------------------+
| isnan(asin(radians(180))) |
+---------------------------+
| true                      |
+---------------------------+

上面的结果使用asin(radians(180))返回NaN,然后isnan()返回true。

rand()

返回一个范围在0(包含)到1(不包含)之间的随机浮点数。

函数签名

rand() -> DOUBLE | FLOAT

示例

返回一个随机数
RETURN rand() AS r

返回:

+--------------------+
| r                  |
+--------------------+
| 0.8603127559959718 |
+--------------------+
检查随机数是否在[0,1)范围内
RETURN rand()>=0 and rand()<1 AS r

返回:

+------+
| r    |
+------+
| true |
+------+

rand_geo() 和 rand_geometric()

rand_geo()是rand_geometric()的别名,两者接受相同的参数且功能相同。它们根据几何分布随机生成一个非负整数。返回值表示在第一次成功之前失败的独立伯努利试验次数,其中每次试验的成功概率为p。

NULL 行为:默认

函数签名

rand_geo(p: DOUBLE) -> INT32

或

rand_geometric(p: DOUBLE) -> INT32

参数

  • p:每次试验成功的概率。

    • 当p小于或等于0时,函数返回INT32的最大值2147483647。
    • 当p大于或等于1时,函数返回0。
    • 当p大于0且小于1时,函数返回一个随机非负整数。

示例

边界值
RETURN rand_geo(0) AS a, rand_geometric(1) AS b

返回:

+------------+---+
| a          | b |
+------------+---+
| 2147483647 | 0 |
+------------+---+
返回一个服从几何分布的随机数
RETURN rand_geometric(0.5) AS r

可能的返回结果如下:

+---+
| r |
+---+
| 2 |
+---+

对数函数

log()

返回一个数在特定底数下的对数值。

NULL 行为:默认

函数签名

log(b: Numeric, num: Numeric) ->  DOUBLE | DECIMAL 
  • b和num必须是相同的数据类型。
  • 如果b的数据类型为DECIMAL,则返回值的数据类型为DECIMAL;否则,返回值的数据类型为DOUBLE。

示例

RETURN log(7,7)

返回:

+-----------+
| log(7,7) |
+-----------+
| 1.0       |
+-----------+

log10()

返回一个数在以 10 为底数下的对数值。

该函数还支持向量数据类型。更多信息,请参见向量函数log10()。

NULL 行为:默认

函数签名

log10(num: Numeric) -> DOUBLE

示例

RETURN log10(10)

返回:

+-----------+
| log10(10) |
+-----------+
| 1.0       |
+-----------+

ln()

返回一个数在自然底数e下的对数值。自然底数e是一个无限不循环的小数,约等于 2.71828。

该函数还支持向量数据类型。更多信息,请参见向量函数ln()。

NULL 行为:默认

函数签名

ln(num: Numeric) ->  DOUBLE | DECIMAL 

如果num的数据类型为DECIMAL,则返回值的数据类型为DECIMAL;否则,返回值的数据类型为DOUBLE。

示例

RETURN ln(271801.0/99990)

返回:

+------------------------+
| ln(271801.0/99990)     |
+------------------------+
| 0.99999999989838178269 |
+------------------------+

三角函数

sin()

返回一个数的正弦值。

NULL 行为:默认

函数签名

sin(num: Numeric) -> DOUBLE

示例

RETURN sin(radians(90)) AS a

返回:

+-----+
| a   |
+-----+
| 1.0 |
+-----+

cos()

返回一个数的余弦值。

NULL 行为:默认

函数签名

cos(num: Numeric) -> DOUBLE

示例

RETURN cos(0) AS a

返回:

+-----+
| a   |
+-----+
| 1.0 |
+-----+

tan()

返回一个数的正切值。

NULL 行为:默认

函数签名

tan(num: Numeric) -> DOUBLE

示例

RETURN tan(0.25*radians(180)) AS a

返回:

+--------------------+
| a                  |
+--------------------+
| 0.9999999999999999 |
+--------------------+

cot()

返回一个数的余切值。

NULL 行为:默认

函数签名

cot(num: Numeric) -> DOUBLE

示例

RETURN cot(0.25*radians(180)) AS a

返回:

+--------------------+
| a                  |
+--------------------+
| 1.0000000000000002 |
+--------------------+

sinh()

返回一个数的双曲正弦值。

NULL 行为:默认

函数签名

sinh(num: Numeric) -> DOUBLE

示例

RETURN sinh(radians(180)) AS a

返回:

+--------------------+
| a                  |
+--------------------+
| 11.548739357257748 |
+--------------------+

cosh()

返回一个数的双曲余弦值。

NULL 行为:默认

函数签名

cosh(num: Numeric) -> DOUBLE

示例

RETURN cosh(radians(180)) AS a

返回:

+--------------------+
| a                  |
+--------------------+
| 11.591953275521519 |
+--------------------+

tanh()

返回一个数的双曲正切值。

NULL 行为:默认

函数签名

tanh(num: Numeric) -> DOUBLE

示例

RETURN tanh(1)

返回:

+--------------------+
| tanh(1)            |
+--------------------+
| 0.7615941559557649 |
+--------------------+

asin()

返回一个数的反正弦值。

NULL 行为:默认

函数签名

asin(num: Numeric) -> DOUBLE

示例

RETURN asin(radians(180))

返回:

+--------------------+
| asin(radians(180)) |
+--------------------+
| NaN                |
+--------------------+

acos()

返回一个数的反余弦值。

NULL 行为:默认

函数签名

acos(num: Numeric) -> DOUBLE

示例

RETURN acos(radians(0))

返回:

+--------------------+
| acos(radians(0))   |
+--------------------+
| 1.5707963267948966 |
+--------------------+

atan()

返回一个数的反正切值。

NULL 行为:默认

函数签名

atan(num: Numeric) -> DOUBLE

示例

RETURN atan(radians(180))

返回:

+--------------------+
| atan(radians(180)) |
+--------------------+
| 1.2626272556789118 |
+--------------------+

haversin()

返回一个数的半正矢值。

NULL 行为:默认

函数签名

haversin(num: Numeric) -> DOUBLE

示例

示例 1:

RETURN haversin(radians(0))

返回:

+----------------------+
| haversin(radians(0)) |
+----------------------+
| 0.0                  |
+----------------------+

示例 2:

RETURN haversin(radians(180))

返回:

+------------------------+
| haversin(radians(180)) |
+------------------------+
| 1.0                    |
+------------------------+