本文将为您介绍MaxCompute支持的数学函数,包括函数的命令格式、参数说明以及使用示例。通过使用这些数学函数,您可以进行数据计算、数据转换等各种操作。
MaxCompute SQL支持的数学函数如下。
函数 | 功能 |
计算绝对值。 | |
计算反余弦值。 | |
计算expr1/expr2的反正切值。 | |
计算反正弦值。 | |
计算反正切值。 | |
计算二进制代码值。 | |
计算立方根值。 | |
计算向上取整值。 | |
计算进制转换值。 | |
计算皮尔逊系数。 | |
计算余弦值。 | |
计算双曲余弦值。 | |
计算余切值。 | |
将弧度转换为角度。 | |
返回e的值。 | |
计算指数值。 | |
计算阶乘值。 | |
过滤ARRAY数组中的元素。 | |
计算向下取整值。 | |
将数字转化为指定格式的字符串。 | |
返回整数或字符串的十六进制格式。 | |
判断表达式的值是否为NaN。 | |
计算自然对数。 | |
计算log对数值。 | |
计算以10为底的对数。 | |
计算以2为底的对数。 | |
返回表达式的负值。 | |
返回π的值。 | |
返回表达式的值。 | |
计算幂值。 | |
将角度转换为弧度。 | |
返回随机数。 | |
返回四舍五入到指定小数点位置的值。 | |
计算按位左移值。 | |
计算按位右移值。 | |
计算无符号按位右移值。 | |
返回输入参数的符号。 | |
计算正弦值。 | |
计算双曲正弦值。 | |
计算平方根。 | |
计算正切值。 | |
计算双曲正切值。 | |
返回截取到指定小数点位置的值。 | |
返回十六进制字符串所代表的字符串。 | |
返回指定字段值落入的分组编号。 |
取余数计算等更多计算请参见算术运算符。
注意事项
升级到MaxCompute 2.0后,产品扩展了部分函数。如果您用到的函数涉及新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用扩展函数时,需要执行如下语句开启新数据类型开关:
示例数据
为便于理解各函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表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 | 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。Hive兼容模式下返回NaN。
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 | +-------------------+--------------------+--------------------+---------------------+
ATAN2
命令格式
double atan2(<expr1>, <expr2>)
命令说明
计算expr1/expr2的反正切函数。
参数说明
expr1:必填。DOUBLE类型。输入为STRING、BIGINT、DECIMAL类型时,会隐式转换为DOUBLE类型后参与运算。
expr2:必填。DOUBLE类型。输入为STRING、BIGINT、DECIMAL类型时,会隐式转换为DOUBLE类型后参与运算。
返回值说明
返回DOUBLE类型。值域在
-π/2~π/2
之间。expr1或expr2值为NULL时,返回NULL。示例
--返回0.0。 select atan2(0, 0);
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。Hive兼容模式下返回NaN。
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 | +---------------------+----------------------+----------------------+---------------------+
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 | +---------------------+---------------------+----------------------+---------------------+---------------------+
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_base、to_base:必填。以十进制表示的进制值,支持的值为2、8、10和16。支持STRING及DOUBLE类型的隐式转换。
返回值说明
返回STRING类型。返回规则如下:
input、from_base或to_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 | +------------+------------+-------------+------------+
CORR
命令格式
double corr(<col1>, <col2>)
命令说明
计算两列数据的皮尔逊系数(Pearson Correlation Coefficien)。此函数为MaxCompute 2.0扩展函数。
参数说明
col1、col2:必填。待计算皮尔逊系数的表的两个列名称。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL类型。col1和col2的数据类型可以不相同。
返回值说明
返回DOUBLE类型。如果某一输入列的某一行存在NULL值,该行不参与计算。
示例
基于示例数据,计算double_data和float_data两列的皮尔逊系数,命令示例如下。
select corr(double_data,float_data) from mf_math_fun_t;
返回结果为1.0。
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);
表数据示例
基于示例数据,计算余切值,命令示例如下。
selectcot(bigint_data)asbigint_new,cot(double_data)asdouble_new,cot(decimal_data)asdecimal_new,cot(string_data)asstring_newfrommf_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 | +-----------------------+---------------------+---------------------+--------------------+
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();
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 | +-------------------------+-------------------------+-------------------------+-------------------------+
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 | +------------+------------+
FILTER
命令格式
array<T> filter(array<T> <a>, function<T,boolean> <func>)
参数说明
a:必填。ARRAY数组。
array<T>
中的T
指代ARRAY数组元素的数据类型,数组中的元素可以为任意类型。func:必填。用于对a中元素进行过滤的函数(内置函数或自定义函数)或表达式,其输入参数类型必须与a中元素的数据类型一致,其输出结果数据类型为BOOLEAN。
返回值说明
返回ARRAY类型。
示例
--返回[2, 3]。 select filter(array(1, 2, 3), x -> x > 1);
说明关于Lambda函数
->
的介绍,详情请参见Lambda函数。
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 | +------------+------------+-------------+------------+
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,则返回报错。
expr1或expr2值为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 | +------------------+------------------+------------+-------------+------------+------------+
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类型。 返回规则如下:
base或x为NULL时,返回NULL。
base或x为负数或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 | +--------------------+----------------------+--------------------+--------------------+
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 | +--------------------+--------------------+---------------------+---------------------+-----------------------+--------------------+
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 | +--------------------+--------------------+----------------------+--------------------+----------------------+--------------------+
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);
PI
命令格式
double pi()
命令说明
返回π的值。此函数为MaxCompute 2.0扩展函数。
返回值说明
返回DOUBLE类型。
示例
--返回3.141592653589793。 select pi();
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>)
命令说明
计算x的y次方,即
x^y
。参数说明
x:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
y:必填。DOUBLE或DECIMAL类型。输入为STRING、BIGINT类型时,会隐式转换为DOUBLE类型后参与运算。
返回值说明
返回DOUBLE或DECIMAL类型。返回规则如下:
x或y为DOUBLE、DECIMAL类型时会返回相应的类型。
x或y为STRING、BIGINT类型时,返回DOUBLE类型。
x或y值为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 | +------------+----------------------+----------------------+------------+
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 | +-----------------------+-----------------------+------------------------+------------------------+------------------------+-----------------------+
RAND
命令格式
double rand(bigint <seed>)
命令说明
返回DOUBLE类型的随机数,返回值区间是0~1。
参数说明
seed:可选。BIGINT类型。随机数种子,决定随机数序列的起始值。
说明您可以通过seed确定随机数序列,seed确定后,即可固定该函数的返回结果。执行环境是一样的情况下,seed取值不变的话,返回值是一样的,如果需要返回不一样的结果,需要修改seed取值。
可在SQL前新增以下参数,默认值为
false
。set odps.sql.executionengine.enable.rand.time.seed=true|false;
当参数值为
false
时,RAND函数使用当前InstanceId作为随机数初始化seed,可以保证函数幂等。当参数值为
true
时,RAND函数使用当前系统时间作为随机数初始化的seed, 但RAND函数不再幂等,不能作为Shuffle Key使用,会导致重跑的结果不相同。
返回值说明
返回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类型时,返回报错。
number或decimal_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 | +------------+------------+-------------+------------+
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类型时,返回报错。
number1或number2值为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类型时,返回报错。
number1或number2值为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类型时,返回报错。
number1或number2值为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 | +------------+---------------------+
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 | +------------+------------+------------+-------------+------------+------------+
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:必填。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类型时,返回报错。
number或decimal_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 | +------------+---------------------+-------------+------------+
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_value、max_value或num_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 | NULL | NULL | +-------+--------+-------------+
示例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 | +------+-------+-------------+