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

MaxCompute SQL支持的数学函数如下。
函数 功能
ABS 计算绝对值。
ACOS 计算反余弦值。
ASIN 计算反正弦值。
ATAN 计算反正切值。
CEIL 计算向上取整值。
CONV 计算进制转换值。
COS 计算余弦值。
COSH 计算双曲余弦值。
COT 计算余切值。
EXP 计算指数值。
FLOOR 计算向下取整值。
LN 计算自然对数。
LOG 计算log对数值。
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');

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 |
      +---------------------+----------------------+----------------------+---------------------+

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 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 |
      +-----------------------+--------------------+--------------------+----------------------+

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        |
      +------------+------------+-------------+------------+

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               |
      +--------------------+----------------------+--------------------+--------------------+

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        |
      +------+-------+-------------+