MaxCompute SQL提供了常见的数学函数供您在开发过程中使用,您可以根据实际需要选择合适的数学函数,进行数据计算、数据转换相关操作。本文为您提供MaxCompute SQL支持的数学函数的命令格式、参数说明及示例,指导您使用数学函数完成开发。

MaxCompute SQL支持的数学函数如下。
函数功能
ABS计算绝对值。
ACOS计算反余弦值。
ASIN计算反正弦值。
ATAN计算反正切值。
ATAN2计算expr1/expr2的反正切值。
CEIL计算向上取整值。
CONV计算进制转换值。
COS计算余弦值。
COSH计算双曲余弦值。
COT计算余切值。
EXP计算指数值。
FLOOR计算向下取整值。
ISNAN判断表达式的值是否为NaN。
LN计算自然对数。
LOG计算log对数值。
NEGATIVE返回表达式的负值。
POSITIVE返回表达式的值。
POW计算幂值。
RAND返回随机数。
ROUND返回四舍五入到指定小数点位置的值。
SIN计算正弦值。
SINH计算双曲正弦值。
SQRT计算平方根。
TAN计算正切值。
TANH计算双曲正切值。
TRUNC返回截取到指定小数点位置的值。
BIN计算二进制代码值。
CBRT计算立方根值。
CORR计算皮尔逊系数。
DEGREES将弧度转换为角度。
E返回e的值。
FACTORIAL计算阶乘值。
FORMAT_NUMBER将数字转化为指定格式的字符串。
HEX返回整数或字符串的十六进制格式。
LOG2计算以2为底的对数。
LOG10计算以10为底的对数。
PI返回π的值。
RADIANS将角度转换为弧度。
SIGN返回输入参数的符号。
SHIFTLEFT计算按位左移值。
SHIFTRIGHT计算按位右移值。
SHIFTRIGHTUNSIGNED计算无符号按位右移值。
UNHEX返回十六进制字符串所代表的字符串。
WIDTH_BUCKET返回指定字段值落入的分组编号。
说明 取余数计算等更多计算请参见算术运算符

注意事项

升级到MaxCompute 2.0后,产品扩展了部分函数。如果您用到的函数涉及新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用扩展函数时,需要执行如下语句开启新数据类型开关:
  • Session级别:如果使用新数据类型,您需要在SQL语句前加上语句set odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。
  • Project级别:Project Owner可根据需要对Project进行设置,等待10~15分钟后才会生效。命令如下。
    setproject odps.sql.type.system.odps2=true;
    setproject的详细说明请参见项目空间操作。关于开启Project级别数据类型的注意事项,请参见数据类型版本说明

示例数据

为便于理解各函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表mf_math_fun_t,并添加数据,命令示例如下。
create table if not exists mf_math_fun_t(
     int_data     int,
     bigint_data  bigint,
     double_data  double,
     decimal_data decimal,
     float_data   float,
     string_data  string
    );
insert into mf_math_fun_t values
(null, -10, 0.525, 0.525BD, cast(0.525 as float), '10'),
(-20, null, -0.1, -0.1BD, cast(-0.1 as float), '-10'),
(0, -1, null, 20.45BD, cast(-1 as float), '30'),
(-40, 4, 0.89, null, cast(0.89 as float), '-30'),
(5, -50, -1, -1BD, null, '50'),
(-60, 6, 1.5, 1.5BD, cast(1.5 as float), '-50'),
(-1, -70, -7.5, -7.5BD, cast(-7.5 as float),null ),
(-80, 1, -10.2, -10.2BD, cast(-10.2 as float), '-1' ),
(9, -90, 2.58, 2.58BD, cast(2.58 as float), '0'),
(-100, 10, -5.8, -5.8BD, cast(-5.8 as float), '-90');
查询表mf_math_fun_t中的数据,命令示例如下:
select * from mf_math_fun_t;
--返回结果。
+------------+-------------+-------------+--------------+------------+-------------+
| int_data   | bigint_data | double_data | decimal_data | float_data | string_data |
+------------+-------------+-------------+--------------+------------+-------------+
| NULL       | -10         | 0.525       | 0.525        | 0.525      | 10          |
| -20        | NULL        | -0.1        | -0.1         | -0.1       | -10         |
| 0          | -1          | NULL        | 20.45        | -1.0       | 30          |
| -40        | 4           | 0.89        | NULL         | 0.89       | -30         |
| 5          | -50         | -1.0        | -1           | NULL       | 50          |
| -60        | 6           | 1.5         | 1.5          | 1.5        | -50         |
| -1         | -70         | -7.5        | -7.5         | -7.5       | NULL        |
| -80        | 1           | -10.2       | -10.2        | -10.2      | -1          |
| 9          | -90         | 2.58        | 2.58         | 2.58       | 0           |
| -100       | 10          | -5.8        | -5.8         | -5.8       | -90         |
| NULL       | -10         | 0.525       | 0.525        | 0.525      | 10          |
| -20        | NULL        | -0.1        | -0.1         | -0.1       | -10         |
| 0          | -1          | NULL        | 20.45        | -1.0       | 30          |
| -40        | 4           | 0.89        | NULL         | 0.89       | -30         |
| 5          | -50         | -1.0        | -1           | NULL       | 50          |
| -60        | 6           | 1.5         | 1.5          | 1.5        | -50         |
| -1         | -70         | -7.5        | -7.5         | -7.5       | NULL        |
| -80        | 1           | -10.2       | -10.2        | -10.2      | -1          |
| 9          | -90         | 2.58        | 2.58         | 2.58       | 0           |
| -100       | 10          | -5.8        | -5.8         | -5.8       | -90         |
+------------+-------------+-------------+--------------+------------+-------------+

ABS

  • 命令格式
    bigint|double|decimal abs(<number>)
  • 命令说明

    计算number的绝对值。

  • 参数说明
    number:必填。DOUBLE、BIGINT或DECIMAL类型。输入为STRING时,会隐式转换为DOUBLE类型后参与运算。
    说明 当输入BIGINT类型的值超过BIGINT的最大表示范围时,会返回DOUBLE类型,但可能会损失精度。
  • 返回值说明
    返回值类型取决于输入参数的类型。返回规则如下:
    • number为DOUBLE、BIGINT或DECIMAL类型时会返回相应的类型。
    • number为STRING类型时,返回DOUBLE类型。
    • number为NULL,则返回NULL。
  • 示例
    • 静态数据示例
      --返回NULL。
      select abs(null);
      --返回1。
      select abs(-1);
      --返回1.2。
      select abs(-1.2);
      --返回2.0。
      select abs("-2");
      --返回1.2232083745629837E32。
      select abs(122320837456298376592387456923748);
      --取tbl1表内id字段的绝对值。下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数和聚合函数外)的使用方式与其类似。
      select abs(id) from tbl1;
    • 表数据示例

      基于示例数据,计算绝对值,命令示例如下。

      select abs(bigint_data) as bigint_new, abs(double_data) as double_new, abs(decimal_data) as decimal_new, abs(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | 10         | 0.525      | 0.525       | 10.0       |
      | NULL       | 0.1        | 0.1         | 10.0       |
      | 1          | NULL       | 20.45       | 30.0       |
      | 4          | 0.89       | NULL        | 30.0       |
      | 50         | 1.0        | 1           | 50.0       |
      | 6          | 1.5        | 1.5         | 50.0       |
      | 70         | 7.5        | 7.5         | NULL       |
      | 1          | 10.2       | 10.2        | 1.0        |
      | 90         | 2.58       | 2.58        | 0.0        |
      | 10         | 5.8        | 5.8         | 90.0       |
      +------------+------------+-------------+------------+

ACOS

  • 命令格式
    double|decimal acos(<number>)
  • 命令说明

    计算number的反余弦函数。

  • 参数说明

    number:必填。取值范围为[-1,1]。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回值类型取决于输入参数的类型。值域在0~π之间。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值不在[-1,1]范围内时,返回NULL。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回0.5155940062460905。
      select acos("0.87");
      --返回1.5707963267948966。
      select acos(0);
      --返回NULL。
      select acos(null);
    • 表数据示例

      基于示例数据,计算反余弦值,命令示例如下。

      select acos(bigint_data) as bigint_new, acos(double_data) as double_new, acos(decimal_data) as decimal_new, acos(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +-------------------+--------------------+--------------------+---------------------+
      | bigint_new        | double_new         | decimal_new        | string_new          |
      +-------------------+--------------------+--------------------+---------------------+
      | NULL              | 1.0180812136981134 | 1.0180812136981134 | NULL                |
      | NULL              | 1.6709637479564565 | 1.6709637479564565 | NULL                |
      | 3.141592653589793 | NULL               | NULL               | NULL                |
      | NULL              | 0.4734511572720662 | NULL               | NULL                |
      | NULL              | 3.141592653589793  | 3.141592653589793  | NULL                |
      | NULL              | NULL               | NULL               | NULL                |
      | NULL              | NULL               | NULL               | NULL                |
      | 0.0               | NULL               | NULL               | 3.141592653589793   |
      | NULL              | NULL               | NULL               | 1.5707963267948966  |
      | NULL              | NULL               | NULL               | NULL                |
      +-------------------+--------------------+--------------------+---------------------+

ASIN

  • 命令格式
    double|decimal asin(<number>)
  • 命令说明

    计算number的反正弦函数。

  • 参数说明

    number:必填。取值范围为[-1,1]。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回值类型取决于输入参数的类型。值域在-π/2~π/2之间。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值不在[-1,1]范围内时,返回NULL。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回1.5707963267948966。
      select asin(1);
      --返回-1.5707963267948966。
      select asin(-1);
      --返回NULL。
      select asin(null);
    • 表数据示例

      基于示例数据,计算反正弦值,命令示例如下。

      select asin(bigint_data) as bigint_new, asin(double_data) as double_new, asin(decimal_data) as decimal_new, asin(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +--------------------+---------------------+---------------------+---------------------+
      | bigint_new         | double_new          | decimal_new         | string_new          |
      +--------------------+---------------------+---------------------+---------------------+
      | NULL               | 0.5527151130967832  | 0.5527151130967832  | NULL                |
      | NULL               | -0.1001674211615598 | -0.1001674211615598 | NULL                |
      | -1.5707963267948966| NULL                | NULL                | NULL                |
      | NULL               | 1.0973451695228305  | NULL                | NULL                |
      | NULL               | -1.5707963267948966 | -1.5707963267948966 | NULL                |
      | NULL               | NULL                | NULL                | NULL                |
      | NULL               | NULL                | NULL                | NULL                |
      | 1.5707963267948966 | NULL                | NULL                | -1.5707963267948966 |
      | NULL               | NULL                | NULL                | 0.0                 |
      | NULL               | NULL                | NULL                | NULL                |
      +--------------------+---------------------+---------------------+---------------------+

ATAN

  • 命令格式
    double atan(<number>)
  • 命令说明

    计算number的反正切函数。

  • 参数说明

    number:必填。DOUBLE类型。输入为STRING、BIGINT、DECIMAL类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明

    返回DOUBLE类型。值域在-π/2~π/2之间。number值为NULL时,返回NULL。

  • 示例
    • 静态数据示例
      --返回0.7853981633974483。
      select atan(1);
      --返回-0.7853981633974483。
      select atan(-1);
      --返回NULL。
      select atan(null);
    • 表数据示例

      基于示例数据,计算反正切值,命令示例如下。

      select atan(bigint_data) as bigint_new, atan(double_data) as double_new, atan(decimal_data) as decimal_new, atan(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +---------------------+----------------------+----------------------+---------------------+
      | bigint_new          | double_new           | decimal_new          | string_new          |
      +---------------------+----------------------+----------------------+---------------------+
      | -1.4711276743037347 | 0.483447001567199    | 0.483447001567199    | 1.4711276743037347  |
      | NULL                | -0.09966865249116204 | -0.09966865249116204 | -1.4711276743037347 |
      | -0.7853981633974483 | NULL                 | 1.521935491607842    | 1.5374753309166493  |
      | 1.3258176636680326  | 0.7272626879966904   | NULL                 | -1.5374753309166493 |
      | -1.550798992821746  | -0.7853981633974483  | -0.7853981633974483  | 1.550798992821746   |
      | 1.4056476493802699  | 0.982793723247329    | 0.982793723247329    | -1.550798992821746  |
      | -1.5565115842075    | -1.4382447944982226  | -1.4382447944982226  | NULL                |
      | 0.7853981633974483  | -1.473069419436178   | -1.473069419436178   | -0.7853981633974483 |
      | -1.5596856728972892 | 1.2010277920014796   | 1.2010277920014796   | 0.0                 |
      | 1.4711276743037347  | -1.4000611153196139  | -1.4000611153196139  | -1.5596856728972892 |
      +---------------------+----------------------+----------------------+---------------------+

ATAN2

  • 命令格式
    double atan2(<expr1>, <expr2>)
  • 命令说明

    计算expr1/expr2的反正切函数。

  • 参数说明
    • expr1:必填。DOUBLE类型。输入为STRING、BIGINT、DECIMAL类型时,会隐式转换为DOUBLE类型后参与运算。
    • expr2:必填。DOUBLE类型。输入为STRING、BIGINT、DECIMAL类型时,会隐式转换为DOUBLE类型后参与运算。
  • 返回值说明

    返回DOUBLE类型。值域在-π/2~π/2之间。expr1expr2值为NULL时,返回NULL。

  • 示例
    --返回0.0。
    select atan2(0, 0);

CEIL

  • 命令格式
    bigint ceil(<value>)
  • 命令说明

    向上取整,返回不小于输入值value的最小整数。

  • 参数说明

    value:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明

    返回BIGINT类型。number值为NULL时,返回NULL。

  • 示例
    • 静态数据示例
      --返回2。
      select ceil(1.1);
      --返回-1。
      select ceil(-1.1);
      --返回NULL。
      select ceil(null);
    • 表数据示例

      基于示例数据,向上取整,命令示例如下。

      select ceil(bigint_data) as bigint_new, ceil(double_data) as double_new, ceil(decimal_data) as decimal_new, ceil(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | -10        | 1          | 1           | 10         |
      | NULL       | 0          | 0           | -10        |
      | -1         | NULL       | 21          | 30         |
      | 4          | 1          | NULL        | -30        |
      | -50        | -1         | -1          | 50         |
      | 6          | 2          | 2           | -50        |
      | -70        | -7         | -7          | NULL       |
      | 1          | -10        | -10         | -1         |
      | -90        | 3          | 3           | 0          |
      | 10         | -5         | -5          | -90        |
      +------------+------------+-------------+------------+

CONV

  • 命令格式
    string conv(<input>, bigint <from_base>, bigint <to_base>)
  • 命令说明

    该函数为进制转换函数。

  • 参数说明
    • input:必填。以STRING表示的要转换的整数值,支持BIGINT和DOUBLE的隐式转换。
    • from_baseto_base:必填。以十进制表示的进制值,支持的值为2、8、10和16。支持STRING及DOUBLE类型的隐式转换。
  • 返回值说明
    返回STRING类型。返回规则如下:
    • inputfrom_baseto_base值为NULL时,返回NULL。
    • 转换过程以64位精度工作,溢出时返回NULL。
    • input如果是负值,即以短划线(-)开头,返回NULL。如果输入的是小数,会转为整数值后进行进制转换,小数部分会被舍弃。
  • 示例
    • 静态数据示例
      --返回12。
      select conv('1100', 2, 10);
      --返回C。
      select conv('1100', 2, 16);
      --返回171。
      select conv('ab', 16, 10);
      --返回AB。
      select conv('ab', 16, 16);
      --返回NULL。
      select conv('1100', null, 10);
    • 表数据示例

      基于示例数据,转换为二进制形式,命令示例如下。

      select conv(bigint_data,10,2) as bigint_new, conv(double_data,10,2) as double_new, conv(decimal_data,10,2) as decimal_new, conv(string_data,10,2) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | NULL       | 0          | 0           | 1010       |
      | NULL       | NULL       | NULL        | NULL       |
      | NULL       | NULL       | 10100       | 11110      |
      | 100        | 0          | NULL        | NULL       |
      | NULL       | NULL       | NULL        | 110010     |
      | 110        | 1          | 1           | NULL       |
      | NULL       | NULL       | NULL        | NULL       |
      | 1          | NULL       | NULL        | NULL       |
      | NULL       | 10         | 10          | 0          |
      | 1010       | NULL       | NULL        | NULL       |
      +------------+------------+-------------+------------+

COS

  • 命令格式
    double|decimal cos(<number>)
  • 命令说明

    计算number的余弦函数,输入为弧度值。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回2.6794896585028633e-8。
      select cos(3.1415926/2);
      --返回-0.9999999999999986。
      select cos(3.1415926);
      --返回NULL。
      select cos(null);
    • 表数据示例

      基于示例数据,计算余弦值,命令示例如下。

      select cos(bigint_data) as bigint_new, cos(double_data) as double_new, cos(decimal_data) as decimal_new, cos(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +---------------------+--------------------+----------------------+---------------------+
      | bigint_new          | double_new         | decimal_new          | string_new          |
      +---------------------+--------------------+----------------------+---------------------+
      | -0.8390715290764524 | 0.8653239416229412 | 0.8653239416229412   | -0.8390715290764524 |
      | NULL                | 0.9950041652780258 | 0.9950041652780258   | -0.8390715290764524 |
      | 0.5403023058681398  | NULL               | -0.02964340851507803 | 0.15425144988758405 |
      | -0.6536436208636119 | 0.6294120265736969 | NULL                 | 0.15425144988758405 |
      | 0.9649660284921133  | 0.5403023058681398 | 0.5403023058681398   | 0.9649660284921133  |
      | 0.960170286650366   | 0.0707372016677029 | 0.0707372016677029   | 0.9649660284921133  |
      | 0.6333192030862999  | 0.3466353178350258 | 0.3466353178350258   | NULL                |
      | 0.5403023058681398  | -0.7142656520272003| -0.7142656520272003  | 0.5403023058681398  |
      | -0.4480736161291701 | -0.8464080412157756| -0.8464080412157756  | 1.0                 |
      | -0.8390715290764524 | 0.8855195169413189 | 0.8855195169413189   | -0.4480736161291701 |
      +---------------------+--------------------+----------------------+---------------------+

COSH

  • 命令格式
    double|decimal cosh(<number>)
  • 命令说明

    计算number的双曲余弦函数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回2.5091784169949913。
      select cosh(3.1415926/2);
      --返回NULL。
      select cosh(null);
    • 表数据示例

      基于示例数据,计算双曲余弦值,命令示例如下。

      select cosh(bigint_data) as bigint_new, cosh(double_data) as double_new, cosh(decimal_data) as decimal_new, cosh(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +-----------------------+--------------------+--------------------+----------------------+
      | bigint_new            | double_new         | decimal_new        | string_new           |
      +-----------------------+--------------------+--------------------+----------------------+
      | 11013.232920103324    | 1.1410071063729532 | 1.1410071063729532 | 11013.232920103324   |
      | NULL                  | 1.0050041680558035 | 1.0050041680558035 | 11013.232920103324   |
      | 1.5430806348152437    | NULL               | 380445243.96844625 | 5343237290762.231    |
      | 27.308232836016487    | 1.42289270202111   | NULL               | 5343237290762.231    |
      | 2.592352764293536e21  | 1.5430806348152437 | 1.5430806348152437 | 2.592352764293536e21 |
      | 201.7156361224559     | 2.352409615243247  | 2.352409615243247  | 2.592352764293536e21 |
      | 1.2577193354595834e30 | 904.0214837702166  | 904.0214837702166  | NULL                 |
      | 1.5430806348152437    | 13451.593055733929 | 13451.593055733929 | 1.5430806348152437   |
      | 6.102016471589204e38  | 6.636456081840602  | 6.636456081840602  | 1.0                  |
      | 11013.232920103324    | 165.151293732197   | 165.151293732197   | 6.102016471589204e38 |
      +-----------------------+--------------------+--------------------+----------------------+

COT

  • 命令格式
    double|decimal cot(<number>)
  • 命令说明

    计算number的余切函数,输入为弧度值。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回2.6794896585028643E-8。
      select cot(3.1415926/2);
      --返回NULL。
      select cot(null);
    • 表数据示例

      基于示例数据,计算余切值,命令示例如下。

      select cot(bigint_data) as bigint_new, cot(double_data) as double_new, cot(decimal_data) as decimal_new, cot(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +-----------------------+--------------------+--------------------+----------------------+
      | bigint_new            | double_new         | decimal_new        | string_new           |
      +-----------------------+--------------------+--------------------+----------------------+
      | -1.54235104535692     | 1.7264594764178474 | 1.7264594764178474 | 1.54235104535692     |
      | NULL                  | -9.966644423259238 | -9.966644423259238 | -1.54235104535692    |
      | -0.6420926159343308   | NULL               | -0.02965644140592836| -0.15611995216165922|
      | 0.8636911544506167    | 0.8099792954471944 | NULL               | 0.15611995216165922  |
      | 3.6778144508505695    | -0.6420926159343308| -0.6420926159343308| -3.6778144508505695  |
      | -3.436353004180128    | 0.07091484430265245| 0.07091484430265245| 3.6778144508505695   |
      | -0.8183574478651038   | -0.36954725630901636| -0.36954725630901636| NULL               |
      | 0.6420926159343308    | -1.0205622016180353 | -1.0205622016180353 | -0.6420926159343308|
      | 0.5012027833801532    | -1.5893944776331337 | -1.5893944776331337 | 1.0                |
      | 1.54235104535692      | 1.9059736612916494  | 1.9059736612916494  | 0.5012027833801532 |
      +-----------------------+---------------------+---------------------+--------------------+

EXP

  • 命令格式
    double|decimal exp(<number>)
  • 命令说明

    计算number的指数函数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回4.810477252069109。
      select exp(3.1415926/2);
      --返回NULL。
      select exp(null);
    • 表数据示例

      基于示例数据,计算指数值,命令示例如下。

      select exp(bigint_data) as bigint_new, exp(double_data) as double_new, exp(decimal_data) as decimal_new, exp(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +-------------------------+-------------------------+-------------------------+-------------------------+
      | bigint_new              | double_new              | decimal_new             | string_new              |
      +-------------------------+-------------------------+-------------------------+-------------------------+
      | 0.000045399929762484854 | 1.6904588483790914      | 1.6904588483790914      | 22026.465794806718      |
      | NULL                    | 0.9048374180359595      | 0.9048374180359595      | 0.000045399929762484854 |
      | 0.36787944117144233     | NULL                    | 760890487.9368925       | 10686474581524.463      |
      | 54.598150033144236      | 2.4351296512898744      | NULL                    | 9.357622968840175e-14   |
      | 1.9287498479639178e-22  | 0.36787944117144233     | 0.36787944117144233     | 5.184705528587072e21    |
      | 403.4287934927351       | 4.4816890703380645      | 4.4816890703380645      | 1.9287498479639178e-22  |
      | 3.975449735908647e-31   | 0.0005530843701478336   | 0.0005530843701478336   | NULL                    |
      | 2.718281828459045       | 0.000037170318684126734 | 0.000037170318684126734 | 0.36787944117144233     |
      | 8.194012623990515e-40   | 13.197138159658358      | 13.197138159658358      | 1.0                     |
      | 22026.465794806718      | 0.0030275547453758153   | 0.0030275547453758153   | 8.194012623990515e-40   |
      +-------------------------+-------------------------+-------------------------+-------------------------+

FLOOR

  • 命令格式
    bigint floor(<number>)
  • 命令说明

    向下取整,返回不大于number的最大整数值。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明

    返回BIGINT类型。number值为NULL时,返回NULL。

  • 示例
    • 静态数据示例
      --返回1。
      select floor(1.2);
      --返回0。
      select floor(0.1);
      --返回-2。
      select floor(-1.2);
      --返回-1。
      select floor(-0.1);
      --返回0。
      select floor(0.0);
      --返回0。
      select floor(-0.0);
      --返回NULL。
      select floor(null);
    • 表数据示例

      基于示例数据,向下取整,命令示例如下。

      select floor(bigint_data) as bigint_new, floor(double_data) as double_new, floor(decimal_data) as decimal_new, floor(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | -10        | 0          | 0           | 10         |
      | NULL       | -1         | -1          | -10        |
      | -1         | NULL       | 20          | 30         |
      | 4          | 0          | NULL        | -30        |
      | -50        | -1         | -1          | 50         |
      | 6          | 1          | 1           | -50        |
      | -70        | -8         | -8          | NULL       |
      | 1          | -11        | -11         | -1         |
      | -90        | 2          | 2           | 0          |
      | 10         | -6         | -6          | -90        |
      +------------+------------+-------------+------------+

ISNAN

  • 命令格式
    boolean isnan(<expr>)
  • 命令说明

    判断expr的值是否为NaN

  • 参数说明

    expr:必填。DOUBLE类型。输入为STRING、BIGINT、DECIMAL类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    • 如果expr的值为NaN,返回True,否则返回False。
    • expr的值为NULL时,返回False。
  • 示例
    --返回False。
    SELECT isnan(100.1);

LN

  • 命令格式
    double|decimal ln(<number>)
  • 命令说明

    计算number的自然对数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为负数或0时,返回NULL。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回1.144729868791239。
      select ln(3.1415926);
      --返回NULL。
      select ln(null);
    • 表数据示例

      基于示例数据,计算自然对数值,命令示例如下。

      select ln(bigint_data) as bigint_new, ln(double_data) as double_new, ln(decimal_data) as decimal_new, ln(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +--------------------+----------------------+---------------------+---------------------+
      | bigint_new         | double_new           | decimal_new         | string_new          |
      +--------------------+----------------------+---------------------+---------------------+
      | NULL               | -0.6443570163905132  | -0.6443570163905132 | 2.302585092994046   |
      | NULL               | NULL                 | NULL                | NULL                |
      | NULL               | NULL                 | 3.017982882488811   | 3.4011973816621555  |
      | 1.3862943611198906 | -0.11653381625595151 | NULL                | NULL                |
      | NULL               | NULL                 | NULL                | 3.912023005428146   |
      | 1.791759469228055  | 0.4054651081081644   | 0.4054651081081644  | NULL                |
      | NULL               | NULL                 | NULL                | NULL                |
      | 0.0                | NULL                 | NULL                | NULL                |
      | NULL               | 0.9477893989335261   | 0.9477893989335261  | NULL                |
      | 2.302585092994046  | NULL                 | NULL                | NULL                |
      +--------------------+----------------------+---------------------+---------------------+

LOG

  • 命令格式
    double log(<base>, <x>)
  • 命令说明

    计算以base为底的x的对数。

  • 参数说明
    • base:必填。底数。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
    • x:必填。待计算对数的值。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
  • 返回值说明
    返回DOUBLE类型。 返回规则如下:
    • basex为NULL时,返回NULL。
    • basex为负数或0时,返回NULL。
    • 如果base为1(会引发一个除零行为),会返回NULL。
  • 示例
    • 静态数据示例
      --返回4.0。
      select log(2, 16);
      --返回NULL。
      select log(2, null);
    • 表数据示例

      基于示例数据,计算列以2为底的对数值,命令示例如下。

      select log(2,bigint_data) as bigint_new, log(2,double_data) as double_new, log(2,decimal_data) as decimal_new, log(2,string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +--------------------+----------------------+--------------------+--------------------+
      | bigint_new         | double_new           | decimal_new        | string_new         |
      +--------------------+----------------------+--------------------+--------------------+
      | NULL               | -0.929610672108602   | -0.929610672108602 | 3.3219280948873626 |
      | NULL               | NULL                 | NULL               | NULL               |
      | NULL               | NULL                 | 4.354028938054387  | 4.906890595608519  |
      | 2.0                | -0.16812275880832692 | NULL               | NULL               |
      | NULL               | NULL                 | NULL               | 5.643856189774724  |
      | 2.584962500721156  | 0.5849625007211562   | 0.5849625007211562 | NULL               |
      | NULL               | NULL                 | NULL               | NULL               |
      | 0.0                | NULL                 | NULL               | NULL               |
      | NULL               | 1.3673710656485296   | 1.3673710656485296 | NULL               |
      | 3.3219280948873626 | NULL                 | NULL               | NULL               |
      +--------------------+----------------------+--------------------+--------------------+

NEGATIVE

  • 命令格式
    TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL negative(TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL <expr>)
  • 命令说明

    返回expr的负值。

  • 参数说明

    expr:必填。输入表达式,支持TINYINT、SMALLINT、INT、BIGINT、DOUBLE、DECIMAL类型。

  • 返回值说明

    返回expr表达式的负值。

  • 示例
    --返回-1。
    SELECT negative(1);

POSITIVE

  • 命令格式
    TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL positive(TINYINT|SMALLINT|INT|BIGINT|DOUBLE|DECIMAL <expr>)
  • 命令说明

    返回expr的值。

  • 参数说明

    expr:必填。输入表达式,支持TINYINT、SMALLINT、INT、BIGINT、DOUBLE、DECIMAL类型。

  • 返回值说明

    返回expr表达式的值。

  • 示例
    --返回1。
    SELECT positive(1);

POW

  • 命令格式
    double|decimal pow(<x>, <y>)
  • 命令说明

    计算xy次方,即x^y

  • 参数说明
    • x:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
    • y:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • xy为DOUBLE、DECIMAL类型时会返回相应的类型。
    • xy为STRING、BIGINT类型时,返回DOUBLE类型。
    • xy值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回65536.0。
      select pow(2, 16);
      --返回NULL。
      select pow(2, null);
    • 表数据示例

      基于示例数据,计算列的2次方,命令示例如下。

      select pow(bigint_data, 2) as bigint_new, pow(double_data, 2) as double_new, pow(decimal_data, 2) as decimal_new, pow(string_data, 2) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+----------------------+----------------------+------------+
      | bigint_new | double_new           | decimal_new          | string_new |
      +------------+----------------------+----------------------+------------+
      | 100.0      | 0.275625             | 0.275625             | 100.0      |
      | NULL       | 0.010000000000000002 | 0.010000000000000002 | 100.0      |
      | 1.0        | NULL                 | 418.2025             | 900.0      |
      | 16.0       | 0.7921               | NULL                 | 900.0      |
      | 2500.0     | 1.0                  | 1.0                  | 2500.0     |
      | 36.0       | 2.25                 | 2.25                 | 2500.0     |
      | 4900.0     | 56.25                | 56.25                | NULL       |
      | 1.0        | 104.03999999999999   | 104.03999999999999   | 1.0        |
      | 8100.0     | 6.6564000000000005   | 6.6564000000000005   | 0.0        |
      | 100.0      | 33.64                | 33.64                | 8100.0     |
      +------------+----------------------+----------------------+------------+

RAND

  • 命令格式
    double rand(bigint <seed>)
  • 命令说明

    返回DOUBLE类型的随机数,返回值区间是0~1。

  • 参数说明

    seed:可选。BIGINT类型。随机数种子,决定随机数序列的起始值。

    说明 您可以通过seed确定随机数序列,seed确定后,即可固定该函数的返回结果。执行环境是一样的情况下,seed取值不变的话,返回值是一样的,如果需要返回不一样的结果,需要修改seed取值。
  • 返回值说明

    返回DOUBLE类型。

  • 示例
    --返回4.7147460303803655E-4。
    select rand();
    --返回0.7308781907032909。
    select rand(1);

ROUND

  • 命令格式
    double|decimal round(<number>[, bigint <decimal_places>])
  • 命令说明

    四舍五入到指定小数点位置。

  • 参数说明
    • number:必填。DOUBLE类型或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
    • decimal_places:可选。BIGINT类型常量,四舍五入计算到小数点后的位置。如果省略表示四舍五入到个位数,默认值为0。
      说明 decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果decimal_places超过了整数部分长度,返回0。
  • 返回值说明
    返回DOUBLE类型或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • decimal_places非BIGINT类型时,返回报错。
    • numberdecimal_places值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回125.0。
      select round(125.315);
      --返回125.3。
      select round(125.315, 1);
      --返回125.32。
      select round(125.315, 2);
      --返回125.315。
      select round(125.315, 3);
      --返回-125.32。
      select round(-125.315, 2);
      --返回100.0。
      select round(123.345, -2);
      --返回NULL。
      select round(null);
      --返回123.345。
      select round(123.345, 4);
      --返回0.0。
      select round(123.345, -4);
    • 表数据示例

      基于示例数据,对列四舍五入到小数点指定位置,命令示例如下。

      select round(bigint_data, 1) as bigint_new, round(double_data, 2) as double_new, round(decimal_data, 1) as decimal_new, round(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+------------+-------------+------------+
      | bigint_new | double_new | decimal_new | string_new |
      +------------+------------+-------------+------------+
      | -10.0      | 0.53       | 0.5         | 10.0       |
      | NULL       | -0.1       | -0.1        | -10.0      |
      | -1.0       | NULL       | 20.5        | 30.0       |
      | 4.0        | 0.89       | NULL        | -30.0      |
      | -50.0      | -1.0       | -1          | 50.0       |
      | 6.0        | 1.5        | 1.5         | -50.0      |
      | -70.0      | -7.5       | -7.5        | NULL       |
      | 1.0        | -10.2      | -10.2       | -1.0       |
      | -90.0      | 2.58       | 2.6         | 0.0        |
      | 10.0       | -5.8       | -5.8        | -90.0      |
      +------------+------------+-------------+------------+

SIN

  • 命令格式
    double|decimal sin(<number>)
  • 命令说明

    计算number的正弦函数,输入为弧度值。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回-0.3048106211022167。
      select sin(60);
      --返回NULL。
      select sin(null);
    • 表数据示例

      基于示例数据,计算列的正弦值,命令示例如下。

      select sin(bigint_data) as bigint_new, sin(double_data) as double_new, sin(decimal_data) as decimal_new, sin(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +----------------------+----------------------+----------------------+----------------------+
      | bigint_new           | double_new           | decimal_new          | string_new           |
      +----------------------+----------------------+----------------------+----------------------+
      | 0.5440211108893698   | 0.5012130046737979   | 0.5012130046737979   | -0.5440211108893698  |
      | NULL                 | -0.09983341664682815 | -0.09983341664682815 | 0.5440211108893698   |
      | -0.8414709848078965  | NULL                 | 0.9995605376022045   | -0.9880316240928618  |
      | -0.7568024953079282  | 0.7770717475268238   | NULL                 | 0.9880316240928618   |
      | 0.26237485370392877  | -0.8414709848078965  | -0.8414709848078965  | -0.26237485370392877 |
      | -0.27941549819892586 | 0.9974949866040544   | 0.9974949866040544   | 0.26237485370392877  |
      | -0.7738906815578891  | -0.9379999767747389  | -0.9379999767747389  | NULL                 |
      | 0.8414709848078965   | 0.6998746875935423   | 0.6998746875935423   | -0.8414709848078965  |
      | -0.8939966636005579  | 0.5325349075556212   | 0.5325349075556212   | 0.0                  |
      | -0.5440211108893698  | 0.46460217941375737  | 0.46460217941375737  | -0.8939966636005579  |
      +----------------------+----------------------+----------------------+----------------------+

SINH

  • 命令格式
    double|decimal sinh(<number>)
  • 命令说明

    计算number的双曲正弦函数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回5.343237290762231E12。
      select sinh(30);
      --返回NULL。
      select sinh(null);
    • 表数据示例

      基于示例数据,计算列的双曲正弦值,命令示例如下。

      select sinh(bigint_data) as bigint_new, sinh(double_data) as double_new, sinh(decimal_data) as decimal_new, sinh(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------------------+----------------------+----------------------+-----------------------+
      | bigint_new             | double_new           | decimal_new          | string_new            |
      +------------------------+----------------------+----------------------+-----------------------+
      | -11013.232874703393    | 0.5494517420061382   | 0.5494517420061382   | 11013.232874703393    |
      | NULL                   | -0.10016675001984403 | -0.10016675001984403 | -11013.232874703393   |
      | -1.1752011936438014    | NULL                 | 380445243.96844625   | 5343237290762.231     |
      | 27.28991719712775      | 1.0122369492687646   | NULL                 | -5343237290762.231    |
      | -2.592352764293536e21  | -1.1752011936438014  | -1.1752011936438014  | 2.592352764293536e21  |
      | 201.71315737027922     | 2.1292794550948173   | 2.1292794550948173   | -2.592352764293536e21 |
      | -1.2577193354595834e30 | -904.0209306858466   | -904.0209306858466   | NULL                  |
      | 1.1752011936438014     | -13451.593018563612  | -13451.593018563612  | -1.1752011936438014   |
      | -6.102016471589204e38  | 6.560682077817757    | 6.560682077817757    | 0.0                   |
      | 11013.232874703393     | -165.1482661774516   | -165.1482661774516   | -6.102016471589204e38 |
      +------------------------+----------------------+----------------------+-----------------------+

SQRT

  • 命令格式
    double|decimal sqrt(<number>)
  • 命令说明

    计算number的平方根。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型,必须大于0,小于0时返回NULL。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回2.0。
      select sqrt(4);
      --返回NULL。
      select sqrt(null);
    • 表数据示例

      基于示例数据,计算列的平方根,命令示例如下。

      select sqrt(bigint_data) as bigint_new, sqrt(double_data) as double_new, sqrt(decimal_data) as decimal_new, sqrt(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +--------------------+--------------------+-------------------+--------------------+
      | bigint_new         | double_new         | decimal_new       | string_new         |
      +--------------------+--------------------+-------------------+--------------------+
      | NULL               | 0.724568837309472  | 0.724568837309472 | 3.1622776601683795 |
      | NULL               | NULL               | NULL              | NULL               |
      | NULL               | NULL               | 4.522167621838006 | 5.477225575051661  |
      | 2.0                | 0.9433981132056604 | NULL              | NULL               |
      | NULL               | NULL               | NULL              | 7.0710678118654755 |
      | 2.449489742783178  | 1.224744871391589  | 1.224744871391589 | NULL               |
      | NULL               | NULL               | NULL              | NULL               |
      | 1.0                | NULL               | NULL              | NULL               |
      | NULL               | 1.606237840420901  | 1.606237840420901 | 0.0                |
      | 3.1622776601683795 | NULL               | NULL              | NULL               |
      +--------------------+--------------------+-------------------+--------------------+

TAN

  • 命令格式
    double|decimal tan(<number>)
  • 命令说明

    计算number的正切函数,输入为弧度值。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回-6.405331196646276。
      select tan(30);
      --返回NULL。
      select tan(null);
    • 表数据示例

      基于示例数据,计算列的正切值,命令示例如下。

      select tan(bigint_data) as bigint_new, tan(double_data) as double_new, tan(decimal_data) as decimal_new, tan(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +----------------------+----------------------+----------------------+----------------------+
      | bigint_new           | double_new           | decimal_new          | string_new           |
      +----------------------+----------------------+----------------------+----------------------+
      | -0.6483608274590866  | 0.5792200822893652   | 0.5792200822893652   | 0.6483608274590866   |
      | NULL                 | -0.10033467208545055 | -0.10033467208545055 | -0.6483608274590866  |
      | -1.5574077246549023  | NULL                 | -33.71948732190433   | -6.405331196646276   |
      | 1.1578212823495775   | 1.2345994590490046   | NULL                 | 6.405331196646276    |
      | 0.27190061199763077  | -1.5574077246549023  | -1.5574077246549023  | -0.27190061199763077 |
      | -0.29100619138474915 | 14.101419947171719   | 14.101419947171719   | 0.27190061199763077  |
      | -1.2219599181369434  | -2.706013866772691   | -2.706013866772691   | NULL                 |
      | 1.5574077246549023   | -0.979852083895097   | -0.979852083895097   | -1.5574077246549023  |
      | 1.995200412208242    | -0.6291704256385503  | -0.6291704256385503  | 0.0                  |
      | 0.6483608274590866   | 0.5246662219468002   | 0.5246662219468002   | 1.995200412208242    |
      +----------------------+----------------------+----------------------+----------------------+

TANH

  • 命令格式
    double|decimal tanh(<number>)
  • 命令说明

    计算number的双曲正切函数。

  • 参数说明

    number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。

  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回1.0。
      select tanh(30);
      --返回NULL。
      select tanh(null);
    • 表数据示例

      基于示例数据,计算列的双曲正切值,命令示例如下。

      select tanh(bigint_data) as bigint_new, tanh(double_data) as double_new, tanh(decimal_data) as decimal_new, tanh(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +---------------------+----------------------+----------------------+---------------------+
      | bigint_new          | double_new           | decimal_new          | string_new          |
      +---------------------+----------------------+----------------------+---------------------+
      | -0.9999999958776927 | 0.48154979836430806  | 0.48154979836430806  | 0.9999999958776927  |
      | NULL                | -0.09966799462495582 | -0.09966799462495582 | -0.9999999958776927 |
      | -0.7615941559557649 | NULL                 | 1.0                  | 1.0                 |
      | 0.999329299739067   | 0.7113937318189625   | NULL                 | -1.0                |
      | -1.0                | -0.7615941559557649  | -0.7615941559557649  | 1.0                 |
      | 0.9999877116507956  | 0.9051482536448664   | 0.9051482536448664   | -1.0                |
      | -1.0                | -0.9999993881955461  | -0.9999993881955461  | NULL                |
      | 0.7615941559557649  | -0.9999999972367348  | -0.9999999972367348  | -0.7615941559557649 |
      | -1.0                | 0.9885821584459533   | 0.9885821584459533   | 0.0                 |
      | 0.9999999958776927  | -0.9999816679925603  | -0.9999816679925603  | -1.0                |
      +---------------------+----------------------+----------------------+---------------------+

TRUNC

  • 命令格式
    double|decimal trunc(<number>[, bigint <decimal_places>])
  • 命令说明
    将输入值number截取到指定小数点位置。
    说明 Hive兼容模式下,该函数不再是数学函数,而用于实现日期转换,对应日期函数请参见DATETRUNC。请根据实际情况设置MaxCompute项目的数据类型版本,更多数据类型版本信息,请参见数据类型版本说明
  • 参数说明
    • number:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
    • decimal_places:可选。BIGINT类型常量,要截取到的小数点位置。省略此参数时默认截取到个位数。decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果decimal_places超过了整数部分长度,则返回0。
  • 返回值说明
    返回DOUBLE或DECIMAL类型。返回规则如下:
    • number为DOUBLE、DECIMAL类型时会返回相应的类型。
    • number为STRING、BIGINT类型时,返回DOUBLE类型。
    • decimal_places非BIGINT类型时,返回报错。
    • numberdecimal_places值为NULL时,返回NULL。
    说明
    • 返回DOUBLE类型时,返回的结果显示可能不符合预期,例如trunc(125.815,1),这个DOUBLE类型显示问题任何系统都存在。
    • 截取掉的部分补0。
  • 示例
    • 静态数据示例
      --返回125.0。
      select trunc(125.815,0);
      --返回125.80000000000001。
      select trunc(125.815,1);
      --返回125.81。
      select trunc(125.815,2);
      --返回125.815。
      select trunc(125.815,3);
      --返回-125.81。
      select trunc(-125.815,2);
      --返回120.0。
      select trunc(125.815,-1);
      --返回100.0。
      select trunc(125.815,-2);
      --返回0.0。
      select trunc(125.815,-3);
      --返回123.345。
      select trunc(123.345,4);
      --返回0.0。
      select trunc(123.345,-4);
      --返回NULL。
      select trunc(123.345,null);
    • 表数据示例

      基于示例数据,将列截取到指定小数点位置,命令示例如下。

      select trunc(bigint_data, 1) as bigint_new, trunc(double_data,1) as double_new, trunc(decimal_data, 1) as decimal_new, trunc(string_data, 1) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+---------------------+-------------+------------+
      | bigint_new | double_new          | decimal_new | string_new |
      +------------+---------------------+-------------+------------+
      | -10.0      | 0.5                 | 0.5         | 10.0       |
      | NULL       | -0.1                | -0.1        | -10.0      |
      | -1.0       | NULL                | 20.4        | 30.0       |
      | 4.0        | 0.8                 | NULL        | -30.0      |
      | -50.0      | -1.0                | -1          | 50.0       |
      | 6.0        | 1.5                 | 1.5         | -50.0      |
      | -70.0      | -7.5                | -7.5        | NULL       |
      | 1.0        | -10.200000000000001 | -10.2       | -1.0       |
      | -90.0      | 2.5                 | 2.5         | 0.0        |
      | 10.0       | -5.800000000000001  | -5.8        | -90.0      |
      +------------+---------------------+-------------+------------+

BIN

  • 命令格式
    string bin(<number>)
  • 命令说明

    返回number的二进制代码表示。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。BIGINT、INT、SMALLINT、TINYINT类型。

  • 返回值说明
    返回STRING类型。返回规则如下:
    • number非BIGINT、INT、SMALLINT、TINYINT类型时,返回报错。
    • number值为0时,返回0。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回0。
      select bin(0);
      --返回NULL。
      select bin(null);
      --返回1100。
      select bin(12);
    • 表数据示例

      基于示例数据,获取int_data和bigint_data两列的二进制表示形式,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select bin(int_data) as int_new, bin(bigint_data) as bigint_new from mf_math_fun_t;
      返回结果如下。
      +----------------------------------------------------------------------------+------------------------------------------------------------------+
      | int_new                                                                    | bigint_new                                                       |
      +----------------------------------------------------------------------------+------------------------------------------------------------------+
      | NULL                                                                       | 1111111111111111111111111111111111111111111111111111111111110110 |
      | 1111111111111111111111111111111111111111111111111111111111101100           | NULL                                                             |
      | 0                                                                          | 1111111111111111111111111111111111111111111111111111111111111111 |
      | 1111111111111111111111111111111111111111111111111111111111011000           | 100                                                              |
      | 101                                                                        | 1111111111111111111111111111111111111111111111111111111111001110 |
      | 1111111111111111111111111111111111111111111111111111111111000100           | 110                                                              |
      | 1111111111111111111111111111111111111111111111111111111111111111           | 1111111111111111111111111111111111111111111111111111111110111010 |
      | 1111111111111111111111111111111111111111111111111111111110110000           | 1                                                                |
      | 1001                                                                       | 1111111111111111111111111111111111111111111111111111111110100110 |
      | 1111111111111111111111111111111111111111111111111111111110011100           | 1010                                                             |
      +----------------------------------------------------------------------------+------------------------------------------------------------------+

CBRT

  • 命令格式
    double cbrt(<number>)
  • 命令说明

    计算number的立方根。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。BIGINT、INT、SMALLINT、TINYINT、DOUBLE、FLOAT、STRING类型数据。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number非BIGINT、INT、SMALLINT、TINYINT、DOUBLE、FLOAT、STRING类型时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回2.0。
      select cbrt(8);
      --返回NULL。
      select cbrt(null);
    • 表数据示例

      基于示例数据,获取除decimal_data之外其他列的立方根,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select cbrt(int_data) as int_new, cbrt(bigint_data) as bigint_new, cbrt(double_data) as double_new, cbrt(float_data) as float_new, cbrt(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +---------------------+---------------------+----------------------+---------------------+---------------------+
      | int_new             | bigint_new          | double_new           | float_new           | string_new          |
      +---------------------+---------------------+----------------------+---------------------+---------------------+
      | NULL                | -2.1544346900318834 | 0.806714323012272    | 0.8067143108004823  | 2.1544346900318834  |
      | -2.7144176165949063 | NULL                | -0.46415888336127786 | -0.46415888566678   | -2.1544346900318834 |
      | 0.0                 | -1.0                | NULL                 | -1.0                | 3.107232505953859   |
      | -3.4199518933533937 | 1.5874010519681996  | 0.9619001716077046   | 0.961900166454112   | -3.107232505953859  |
      | 1.7099759466766968  | -3.6840314986403864 | -1.0                 | NULL                | 3.6840314986403864  |
      | -3.9148676411688634 | 1.8171205928321394  | 1.1447142425533317   | 1.1447142425533317  | -3.6840314986403864 |
      | -1.0                | -4.121285299808557  | -1.9574338205844317  | -1.9574338205844317 | NULL                |
      | -4.308869380063767  | 1.0                 | -2.168702885250197   | -2.1687028717323127 | -1.0                |
      | 2.080083823051904   | -4.481404746557165  | 1.3715339700741747   | 1.3715339565548288  | 0.0                 |
      | -4.641588833612778  | 2.1544346900318834  | -1.7967017791430528  | -1.7967017988380907 | -4.481404746557165  |
      +---------------------+---------------------+----------------------+---------------------+---------------------+

CORR

  • 命令格式
    double corr(<col1>, <col2>)
  • 命令说明

    计算两列数据的皮尔逊系数(Pearson Correlation Coefficien)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    col1col2:必填。待计算皮尔逊系数的表的两个列名称。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL类型。col1col2的数据类型可以不相同。

  • 返回值说明

    返回DOUBLE类型。如果某一输入列的某一行存在NULL值,该行不参与计算。

  • 示例

    基于示例数据,计算double_data和float_data两列的皮尔逊系数,命令示例如下。

    select corr(double_data,float_data) from mf_math_fun_t;
    返回结果为1.0。

DEGREES

  • 命令格式
    double degrees(<number>) 
  • 命令说明

    将弧度转换为角度。

  • 参数说明

    number:必填。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING类型。此函数为MaxCompute 2.0扩展函数。

  • 返回值说明

    返回DOUBLE类型。number值为NULL时,返回NULL。

  • 示例
    • 静态数据示例
      --返回90.0。
      select degrees(1.5707963267948966);
      --返回0.0。
      select degrees(0);
      --返回NULL。
      select degrees(null);
    • 表数据示例

      基于示例数据,获取所有列对应的角度,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select degrees(int_data) as int_new, degrees(bigint_data) as bigint_new, degrees(double_data) as double_new, degrees(decimal_data) as decimal_new, degrees(float_data) as float_new, degrees(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
      | int_new             | bigint_new          | double_new          | decimal_new         | float_new           | string_new          |
      +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
      | NULL                | -572.9577951308232  | 30.08028424436822   | 30.08028424436822   | 30.080282878330387  | 572.9577951308232   |
      | -1145.9155902616465 | NULL                | -5.729577951308232  | -5.729577951308232  | -5.729578036685597  | -572.9577951308232  |
      | 0.0                 | -57.29577951308232  | NULL                | 1171.6986910425335  | -57.29577951308232  | 1718.8733853924698  |
      | -2291.831180523293  | 229.1831180523293   | 50.99324376664326   | NULL                | 50.99324294702057   | -1718.8733853924698 |
      | 286.4788975654116   | -2864.7889756541163 | -57.29577951308232  | -57.29577951308232  | NULL                | 2864.7889756541163  |
      | -3437.7467707849396 | 343.77467707849394  | 85.94366926962348   | 85.94366926962348   | 85.94366926962348   | -2864.7889756541163 |
      | -57.29577951308232  | -4010.7045659157625 | -429.71834634811745 | -429.71834634811745 | -429.71834634811745 | NULL                |
      | -4583.662361046586  | 57.29577951308232   | -584.4169510334397  | -584.4169510334397  | -584.416940105137   | -57.29577951308232  |
      | 515.662015617741    | -5156.620156177409  | 147.8231111437524   | 147.8231111437524   | 147.82310677243132  | 0.0                 |
      | -5729.5779513082325 | 572.9577951308232   | -332.31552117587745 | -332.31552117587745 | -332.31553210418014 | -5156.620156177409  |
      +---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+

E

  • 命令格式
    double e()
  • 命令说明

    返回e的值。此函数为MaxCompute 2.0扩展函数。

  • 返回值说明

    返回DOUBLE类型。

  • 示例
    --返回2.718281828459045。
    select e();

FACTORIAL

  • 命令格式
    bigint factorial(<number>)
  • 命令说明

    返回number的阶乘。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。BIGINT、INT、SMALLINT、TINYINT类型,且在[0,20]之间。

  • 返回值说明
    返回BIGINT类型。返回规则如下:
    • number值为0时,返回1。
    • number值为NULL或[0,20]之外的值,返回NULL。
  • 示例
    • 静态数据示例
      --返回120。5!=5*4*3*2*1=120
      select factorial(5); 
      --返回1。
      select factorial(0); 
      --返回NULL。
      select factorial(null);
    • 表数据示例

      基于示例数据,计算int_data和bigint_data两列的阶乘,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select factorial(int_data) as int_new, factorial(bigint_data) as bigint_new from mf_math_fun_t;
      返回结果如下。
      +------------+------------+
      | int_new    | bigint_new |
      +------------+------------+
      | NULL       | NULL       |
      | NULL       | NULL       |
      | 1          | NULL       |
      | NULL       | 24         |
      | 120        | NULL       |
      | NULL       | 720        |
      | NULL       | NULL       |
      | NULL       | 1          |
      | 362880     | NULL       |
      | NULL       | 3628800    |
      +------------+------------+

FORMAT_NUMBER

  • 命令格式
    string format_number(float|double|decimal <expr1>, <expr2>)
  • 命令说明

    将数字转化为指定格式的字符串。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • expr1:必填。需要格式化的数据。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING类型。
    • expr2:必填。需要转化的目标格式。指定需要保留小数位数。也可以为类似#,###,###.##格式描述。
  • 返回值说明
    返回STRING类型数据。返回规则如下:
    • 如果expr2>0,则四舍五入到小数点后指定位数。
    • 如果expr2=0,则没有小数点或小数部分。
    • 如果expr2<0,或者expr2>340,则返回报错。
    • expr1expr2值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回5.230。
      select format_number(5.230134523424545456,3);
      --返回12,332.123。
      select format_number(12332.123456, '#,###,###,###.###');
      --返回NULL。
      select format_number(null,3);
    • 表数据示例

      基于示例数据,将所有列保留指定小数位数,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select format_number(int_data, 1) as int_new, format_number(bigint_data, 1) as bigint_new, format_number(double_data, 2) as double_new, format_number(decimal_data, 1) as decimal_new, format_number(float_data, 0) as float_new, format_number(string_data, 1) as string_new from mf_math_fun_t;
      返回结果如下。
      +---------+------------+------------+-------------+-----------+------------+
      | int_new | bigint_new | double_new | decimal_new | float_new | string_new |
      +---------+------------+------------+-------------+-----------+------------+
      | NULL    | -10.0      | 0.53       | 0.5         | 1         | 10.0       |
      | -20.0   | NULL       | -0.10      | -0.1        | -0        | -10.0      |
      | 0.0     | -1.0       | NULL       | 20.5        | -1        | 30.0       |
      | -40.0   | 4.0        | 0.89       | NULL        | 1         | -30.0      |
      | 5.0     | -50.0      | -1.00      | -1.0        | NULL      | 50.0       |
      | -60.0   | 6.0        | 1.50       | 1.5         | 2         | -50.0      |
      | -1.0    | -70.0      | -7.50      | -7.5        | -8        | NULL       |
      | -80.0   | 1.0        | -10.20     | -10.2       | -10       | -1.0       |
      | 9.0     | -90.0      | 2.58       | 2.6         | 3         | 0.0        |
      | -100.0  | 10.0       | -5.80      | -5.8        | -6        | -90.0      |
      +---------+------------+------------+-------------+-----------+------------+

HEX

  • 命令格式
    string hex(<number>) 
  • 命令说明

    将数值或字符串转换为十六进制格式。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING类型。

  • 返回值说明

    返回STRING类型。返回规则如下:

    • number值非0或非NULL时,返回STRING类型。
    • number值为0时,返回0。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回0。
      select hex(0);
      --返回616263。
      select hex('abc');
      --返回11。
      select hex(17);
      --返回3137。
      select hex('17');
      --返回报错。 
      select hex(null);
    • 表数据示例

      基于示例数据,将所有列转换为十六进制表示形式,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select hex(int_data) as int_new, hex(bigint_data) as bigint_new, hex(double_data) as double_new, hex(decimal_data) as decimal_new, hex(float_data) as float_new, hex(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------------+------------------+------------+-------------+------------+------------+
      | int_new          | bigint_new       | double_new | decimal_new | float_new  | string_new |
      +------------------+------------------+------------+-------------+------------+------------+
      | NULL             | FFFFFFFFFFFFFFF6 | 302E353235 | 302E353235  | 302E353235 | 3130       |
      | FFFFFFFFFFFFFFEC | NULL             | 2D302E31   | 2D302E31    | 2D302E31   | 2D3130     |
      | 0                | FFFFFFFFFFFFFFFF | NULL       | 32302E3435  | 2D31       | 3330       |
      | FFFFFFFFFFFFFFD8 | 4                | 302E3839   | NULL        | 302E3839   | 2D3330     |
      | 5                | FFFFFFFFFFFFFFCE | 2D312E30   | 2D31        | NULL       | 3530       |
      | FFFFFFFFFFFFFFC4 | 6                | 312E35     | 312E35      | 312E35     | 2D3530     |
      | FFFFFFFFFFFFFFFF | FFFFFFFFFFFFFFBA | 2D372E35   | 2D372E35    | 2D372E35   | NULL       |
      | FFFFFFFFFFFFFFB0 | 1                | 2D31302E32 | 2D31302E32  | 2D31302E32 | 2D31       |
      | 9                | FFFFFFFFFFFFFFA6 | 322E3538   | 322E3538    | 322E3538   | 30         |
      | FFFFFFFFFFFFFF9C | A                | 2D352E38   | 2D352E38    | 2D352E38   | 2D3930     |
      +------------------+------------------+------------+-------------+------------+------------+

LOG2

  • 命令格式
    double log2(<number>)
  • 命令说明

    返回以2为底,number的对数。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING类型。

  • 返回值说明

    返回DOUBLE类型。number值为0、负数或NULL时,返回NULL。

  • 示例
    • 静态数据示例
      --返回NULL。
      select log2(null);
      --返回NULL。
      select log2(0);
      --返回3.0。
      select log2(8);
    • 表数据示例

      基于示例数据,计算所有列以2为底的对数,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select log2(int_data) as int_new, log2(bigint_data) as bigint_new, log2(double_data) as double_new, log2(decimal_data) as decimal_new, log2(float_data) as float_new, log2(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +--------------------+--------------------+----------------------+--------------------+----------------------+--------------------+
      | int_new            | bigint_new         | double_new           | decimal_new        | float_new            | string_new         |
      +--------------------+--------------------+----------------------+--------------------+----------------------+--------------------+
      | NULL               | NULL               | -0.929610672108602   | -0.929610672108602 | -0.9296107376258038  | 3.3219280948873626 |
      | NULL               | NULL               | NULL                 | NULL               | NULL                 | NULL               |
      | NULL               | NULL               | NULL                 | 4.354028938054387  | NULL                 | 4.906890595608519  |
      | NULL               | 2.0                | -0.16812275880832692 | NULL               | -0.16812278199699915 | NULL               |
      | 2.321928094887362  | NULL               | NULL                 | NULL               | NULL                 | 5.643856189774724  |
      | NULL               | 2.584962500721156  | 0.5849625007211562   | 0.5849625007211562 | 0.5849625007211562   | NULL               |
      | NULL               | NULL               | NULL                 | NULL               | NULL                 | NULL               |
      | NULL               | 0.0                | NULL                 | NULL               | NULL                 | NULL               |
      | 3.1699250014423126 | NULL               | 1.3673710656485296   | 1.3673710656485296 | 1.367371022986166    | NULL               |
      | NULL               | 3.3219280948873626 | NULL                 | NULL               | NULL                 | NULL               |
      +--------------------+--------------------+----------------------+--------------------+----------------------+--------------------+

LOG10

  • 命令格式
    double log10(<number>)
  • 命令说明

    返回以10为底,number的对数。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING类型。

  • 返回值说明

    返回DOUBLE类型。number值为0、负数或NULL时,返回NULL。

  • 示例
    • 静态数据示例
      --返回NULL。
      select log10(null);
      --返回NULL。
      select log10(0);
      --返回0.9030899869919435。
      select log10(8);
    • 表数据示例

      基于示例数据,计算所有列以10为底的对数,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select log10(int_data) as int_new, log10(bigint_data) as bigint_new, log10(double_data) as double_new, log10(decimal_data) as decimal_new, log10(float_data) as float_new, log10(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +--------------------+--------------------+---------------------+---------------------+-----------------------+--------------------+
      | int_new            | bigint_new         | double_new          | decimal_new         | float_new             | string_new         |
      +--------------------+--------------------+---------------------+---------------------+-----------------------+--------------------+
      | NULL               | NULL               | -0.2798406965940431 | -0.2798406965940431 | -0.27984071631668606  | 1.0                |
      | NULL               | NULL               | NULL                | NULL                | NULL                  | NULL               |
      | NULL               | NULL               | NULL                | 1.3106933123433606  | NULL                  | 1.4771212547196624 |
      | NULL               | 0.6020599913279623 | -0.0506099933550872 | NULL                | -0.050610000335573106 | NULL               |
      | 0.6989700043360187 | NULL               | NULL                | NULL                | NULL                  | 1.6989700043360185 |
      | NULL               | 0.7781512503836435 | 0.17609125905568124 | 0.17609125905568124 | 0.17609125905568124   | NULL               |
      | NULL               | NULL               | NULL                | NULL                | NULL                  | NULL               |
      | NULL               | 0.0                | NULL                | NULL                | NULL                  | NULL               |
      | 0.9542425094393249 | NULL               | 0.4116197059632301  | 0.4116197059632301  | 0.411619693120579     | NULL               |
      | NULL               | 1.0                | NULL                | NULL                | NULL                  | NULL               |
      +--------------------+--------------------+---------------------+---------------------+-----------------------+--------------------+

PI

  • 命令格式
    double pi()
  • 命令说明

    返回π的值。此函数为MaxCompute 2.0扩展函数。

  • 返回值说明

    返回DOUBLE类型。

  • 示例
    --返回3.141592653589793。
    select pi();

RADIANS

  • 命令格式
    double radians(<number>)
  • 命令说明

    将角度转换为弧度。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING类型。

  • 返回值说明

    返回DOUBLE类型。number值为NULL时,返回NULL。

  • 示例
    • 静态数据示例
      --返回1.5707963267948966。
      select radians(90);
      --返回0.0。
      select radians(0);
      --返回NULL。
      select radians(null);
    • 表数据示例

      基于示例数据,计算所有列转换为弧度,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select radians(int_data) as int_new, radians(bigint_data) as bigint_new, radians(double_data) as double_new, radians(decimal_data) as decimal_new, radians(float_data) as float_new, radians(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +-----------------------+-----------------------+------------------------+------------------------+------------------------+-----------------------+
      | int_new               | bigint_new            | double_new             | decimal_new            | float_new              | string_new            |
      +-----------------------+-----------------------+------------------------+------------------------+------------------------+-----------------------+
      | NULL                  | -0.17453292519943295  | 0.00916297857297023    | 0.00916297857297023    | 0.009162978156851308   | 0.17453292519943295   |
      | -0.3490658503988659   | NULL                  | -0.0017453292519943296 | -0.0017453292519943296 | -0.0017453292780017621 | -0.17453292519943295  |
      | 0.0                   | -0.017453292519943295 | NULL                   | 0.3569198320328404     | -0.017453292519943295  | 0.5235987755982988    |
      | -0.6981317007977318   | 0.06981317007977318   | 0.015533430342749534   | NULL                   | 0.015533430093078181   | -0.5235987755982988   |
      | 0.08726646259971647   | -0.8726646259971648   | -0.017453292519943295  | -0.017453292519943295  | NULL                   | 0.8726646259971648    |
      | -1.0471975511965976   | 0.10471975511965977   | 0.02617993877991494    | 0.02617993877991494    | 0.02617993877991494    | -0.8726646259971648   |
      | -0.017453292519943295 | -1.2217304763960306   | -0.1308996938995747    | -0.1308996938995747    | -0.1308996938995747    | NULL                  |
      | -1.3962634015954636   | 0.017453292519943295  | -0.17802358370342158   | -0.17802358370342158   | -0.17802358037447025   | -0.017453292519943295 |
      | 0.15707963267948966   | -1.5707963267948966   | 0.045029494701453704   | 0.045029494701453704   | 0.04502949336987316    | 0.0                   |
      | -1.7453292519943295   | 0.17453292519943295   | -0.10122909661567112   | -0.10122909661567112   | -0.10122909994462247   | -1.5707963267948966   |
      +-----------------------+-----------------------+------------------------+------------------------+------------------------+-----------------------+

SIGN

  • 命令格式
    double sign(<number>)
  • 命令说明

    获取输入参数的符号。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING类型。

  • 返回值说明
    返回DOUBLE类型。返回规则如下:
    • number值为正数时,返回1.0。
    • number值为负数时,返回-1.0。
    • number值为0时,返回0.0。
    • number值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回-1.0。
      select sign(-2.5);
      --返回1.0。
      select sign(2.5);
      --返回0.0。
      select sign(0);
      --返回NULL。
      select sign(null);
    • 表数据示例

      基于示例数据,获取所有列数据的符号,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select sign(int_data) as int_new, sign(bigint_data) as bigint_new, sign(double_data) as double_new, sign(decimal_data) as decimal_new, sign(float_data) as float_new, sign(string_data) as string_new from mf_math_fun_t;
      返回结果如下。
      +------------+------------+------------+-------------+------------+------------+
      | int_new    | bigint_new | double_new | decimal_new | float_new  | string_new |
      +------------+------------+------------+-------------+------------+------------+
      | NULL       | -1.0       | 1.0        | 1           | 1.0        | 1.0        |
      | -1.0       | NULL       | -1.0       | -1          | -1.0       | -1.0       |
      | 0.0        | -1.0       | NULL       | 1           | -1.0       | 1.0        |
      | -1.0       | 1.0        | 1.0        | NULL        | 1.0        | -1.0       |
      | 1.0        | -1.0       | -1.0       | -1          | NULL       | 1.0        |
      | -1.0       | 1.0        | 1.0        | 1           | 1.0        | -1.0       |
      | -1.0       | -1.0       | -1.0       | -1          | -1.0       | NULL       |
      | -1.0       | 1.0        | -1.0       | -1          | -1.0       | -1.0       |
      | 1.0        | -1.0       | 1.0        | 1           | 1.0        | 0.0        |
      | -1.0       | 1.0        | -1.0       | -1          | -1.0       | -1.0       |
      +------------+------------+------------+-------------+------------+------------+

SHIFTLEFT

  • 命令格式
    int shiftleft(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftleft(bigint <number1>, int <number2>)
  • 命令说明

    按位左移(<<)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • number1:必填。TINYINT、SMALLINT、INT或BIGINT类型。
    • number2:必填。INT类型。
  • 返回值说明
    返回INT或BIGINT类型。返回规则如下
    • number1非TINYINT、SMALLINT、INT或BIGINT类型时,返回报错。
    • number2非INT类型时,返回报错。
    • number1number2值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回4。1的二进制左移2位(1<<2,0001左移两位是0100)。
      select shiftleft(1,2); 
      --返回32。4的二进制左移3位(4<<3,0100左移3位是100000)。
      select shiftleft(4,3);
      --返回NULL。
      select shiftleft(null,2);
    • 表数据示例

      基于示例数据,将int_data和bigint_data列按位左移,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select shiftleft(int_data, 1) as int_new, shiftleft(bigint_data, 1) as bigint_new from mf_math_fun_t;
      返回结果如下。
      +---------+------------+
      | int_new | bigint_new |
      +---------+------------+
      | NULL    | -20        |
      | -40     | NULL       |
      | 0       | -2         |
      | -80     | 8          |
      | 10      | -100       |
      | -120    | 12         |
      | -2      | -140       |
      | -160    | 2          |
      | 18      | -180       |
      | -200    | 20         |
      +---------+------------+

SHIFTRIGHT

  • 命令格式
    int shiftright(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftright(bigint <number1>, int <number2>)
  • 命令说明

    按位右移(>>)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • number1:必填。TINYINT、SMALLINT、INT或BIGINT类型。
    • number2:必填。INT类型。
  • 返回值说明
    返回INT或BIGINT类型。返回规则如下:
    • number1非TINYINT、SMALLINT、INT或BIGINT类型时,返回报错。
    • number2非INT类型时,返回报错。
    • number1number2值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回1。4的二进制右移2位(4>>2,0100右移两位是0001)。
      select shiftright(4,2);
      --返回4。32的二进制右移3位(32>>3,100000右移3位是0100)。
      select shiftright(32,3);
      --返回NULL。
      select shiftright(null,3);
    • 表数据示例

      基于示例数据,将int_data和bigint_data列按位右移,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select shiftright(int_data, 1) as int_new, shiftright(bigint_data, 1) as bigint_new from mf_math_fun_t;
      返回结果如下。
      +---------+------------+
      | int_new | bigint_new |
      +---------+------------+
      | NULL    | -5         |
      | -10     | NULL       |
      | 0       | -1         |
      | -20     | 2          |
      | 2       | -25        |
      | -30     | 3          |
      | -1      | -35        |
      | -40     | 0          |
      | 4       | -45        |
      | -50     | 5          |
      +---------+------------+

SHIFTRIGHTUNSIGNED

  • 命令格式
    int shiftrightunsigned(tinyint|smallint|int <number1>, int <number2>)
    bigint shiftrightunsigned(bigint <number1>, int <number2>)
  • 命令说明

    无符号按位右移(>>>)。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • number1:必填。TINYINT、SMALLINT、INT或BIGINT整型数据。
    • number2:必填。INT整型数据。
  • 返回值说明
    返回INT或BIGINT类型。返回规则如下:
    • number1非TINYINT、SMALLINT、INT或BIGINT类型时,返回报错。
    • number2非INT类型时,返回报错。
    • number1number2值为NULL时,返回NULL。
  • 示例
    • 静态数据示例
      --返回2。8的二进制无符号右移2位(8>>>2,1000右移两位是0010)。
      select shiftrightunsigned(8,2);
      --返回1073741820。-14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是00111111 11111111 11111111 11111100)。
      select shiftrightunsigned(-14,2);
      --返回NULL。
      select shiftrightunsigned(-14,null);
    • 表数据示例

      基于示例数据,返回int_data和bigint_data列的无符号按位右移值,命令示例如下。

      --开启2.0新类型。此命令需要与SQL语句一起提交。
      set odps.sql.type.system.odps2=true;
      select shiftrightunsigned(int_data, 1) as int_new, shiftrightunsigned(bigint_data, 1) as bigint_new from mf_math_fun_t;
      返回结果如下。
      +------------+---------------------+
      | int_new    | bigint_new          |
      +------------+---------------------+
      | NULL       | 9223372036854775803 |
      | 2147483638 | NULL                |
      | 0          | 9223372036854775807 |
      | 2147483628 | 2                   |
      | 2          | 9223372036854775783 |
      | 2147483618 | 3                   |
      | 2147483647 | 9223372036854775773 |
      | 2147483608 | 0                   |
      | 4          | 9223372036854775763 |
      | 2147483598 | 5                   |
      +------------+---------------------+

UNHEX

  • 命令格式
    binary unhex(string <number>)
  • 命令说明

    返回十六进制字符串所代表的字符串。此函数为MaxCompute 2.0扩展函数。

  • 参数说明

    number:必填。为十六进制字符串。

  • 返回值说明
    返回BINARY类型。返回规则如下:
    • number值为0时,返回报错。
    • number值为NULL时,返回NULL。
  • 示例
    --返回abc。
    select unhex('616263');
    --返回abc。
    select unhex(616263);
    --返回NULL。
    select unhex(null);

WIDTH_BUCKET

  • 命令格式
    width_bucket(numeric <expr>, numeric <min_value>, numeric <max_value>, int <num_buckets>)
  • 命令说明

    设定分组范围的最小值、最大值和分组个数,构建指定个数的大小相同的分组,返回指定字段值落入的分组编号。支持的数据类型为BIGINT、INT、FLOAT、DOUBLE、DECIMAL以及数据类型2.0的DECIMAL(precision,scale),详情请参见2.0数据类型版本。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • expr:必填。需要判断分组编号的字段。
    • min_value:必填。分组范围最小值。
    • max_value:必填。分组范围最大值,最大值必须比最小值大。
    • num_buckets:必填。分组个数,必须大于0。
  • 返回值说明
    返回值为BIGINT类型,范围为0到设定的分组个数+1。返回规则如下:
    • expr值小于min_value时,返回0。
    • expr大于max_value时,返回设定的分组个数+1。
    • expr值为NULL时,分组编号返回值也为NULL。其他情况返回字段值落入的分组编号。字段值对应的分组编号取值规则为floor( num_buckets * (expr - min_value)/(max_value - min_value) + 1)
    • min_valuemax_valuenum_buckets值为NULL时,返回NULL。
  • 示例
    • 示例1:入参无NULL。命令示例如下。
      select key,value,width_bucket(value,100,500,5) as value_group
      from values 
          (1,99),
          (2,100),
          (3,199),
          (4,200),
          (5,499),
          (6,500),
          (7,501),
          (8,NULL)
      as t(key,value);
      返回结果如下。
      +-------+--------+-------------+
      | key   | value  | value_group |
      +-------+--------+-------------+
      | 1     | 99     | 0           |
      | 2     | 100    | 1           |
      | 3     | 199    | 2           |
      | 4     | 200    | 2           |
      | 5     | 499    | 5           |
      | 6     | 500    | 6           |
      | 7     | 501    | 6           |
      | 8     | \N     | \N          |
      +-------+--------+-------------+
    • 示例2:入参存在NULL。命令示例如下。
      select key,value,width_bucket(value,100,500,null) as value_group
      from values
          (1,99),
          (2,100),
          (3,199),
          (4,200),
          (5,499),
          (6,500),
          (7,501),
          (8,NULL)
      as t(key,value);
      返回结果如下。
      +------+-------+-------------+
      | key  | value | value_group |
      +------+-------+-------------+
      | 1    | 99    | NULL        |
      | 2    | 100   | NULL        |
      | 3    | 199   | NULL        |
      | 4    | 200   | NULL        |
      | 5    | 499   | NULL        |
      | 6    | 500   | NULL        |
      | 7    | 501   | NULL        |
      | 8    | NULL  | NULL        |
      +------+-------+-------------+