全部產品
Search
文件中心

MaxCompute:數學函數

更新時間:Nov 05, 2024

本文將為您介紹MaxCompute支援的數學函數,包括函數的命令格式、參數說明以及使用樣本。通過使用這些數學函數,您可以進行資料計算、資料轉換等各種操作。

MaxCompute SQL支援的數學函數如下。

函數

功能

ABS

計算絕對值。

ACOS

計算反餘弦值。

ATAN2

計算expr1/expr2的反正切值。

ASIN

計算反正弦值。

ATAN

計算反正切值。

BIN

計算二進位代碼值。

CBRT

計算立方根值。

CEIL

計算向上取整值。

CONV

計算進位轉換值。

CORR

計算皮爾遜係數。

COS

計算餘弦值。

COSH

計算雙曲餘弦值。

COT

計算餘切值。

DEGREES

將弧度轉換為角度。

E

返回e的值。

EXP

計算指數值。

FACTORIAL

計算階乘值。

FILTER

過濾ARRAY數組中的元素。

FLOOR

計算向下取整值。

FORMAT_NUMBER

將數字轉化為指定格式的字串。

HEX

返回整數或字串的十六進位格式。

ISNAN

判斷運算式的值是否為NaN。

LN

計算自然對數。

LOG

計算log對數值。

LOG10

計算以10為底的對數。

LOG2

計算以2為底的對數。

NEGATIVE

返回運算式的負值。

PI

返回π的值。

POSITIVE

返回運算式的值。

POW

計算冪值。

RADIANS

將角度轉換為弧度。

RAND

返回隨機數。

ROUND

返回四捨五入到指定小數點位置的值。

SHIFTLEFT

計算按位左移值。

SHIFTRIGHT

計算按位右移值。

SHIFTRIGHTUNSIGNED

計算無符號按位右移值。

SIGN

返回輸入參數的符號。

SIN

計算正弦值。

SINH

計算雙曲正弦值。

SQRT

計算平方根。

TAN

計算正切值。

TANH

計算雙曲正切值。

TRUNC

返回截取到指定小數點位置的值。

UNHEX

返回十六進位字串所代表的字串。

WIDTH_BUCKET

返回指定欄位值落入的分組編號。

說明

取餘數計算等更多計算請參見算術運算子

注意事項

升級到MaxCompute 2.0後,產品擴充了部分函數。如果您用到的函數涉及新資料類型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用擴充函數時,需要執行如下語句開啟新資料類型開關:

  • Session層級:如果使用新資料類型,您需要在SQL語句前加上語句set odps.sql.type.system.odps2=true;,並與SQL語句一起提交執行。

  • Project層級:Project Owner可根據需要對Project進行設定,等待10~15分鐘後才會生效。命令如下。

    setproject odps.sql.type.system.odps2=true;

    setproject的詳細說明請參見專案空間操作。關於開啟Project層級資料類型的注意事項,請參見資料類型版本說明

樣本資料

為便於理解各函數的使用方法,本文為您提供來源資料,基於來源資料提供函數相關樣本。建立表mf_math_fun_t,並添加資料,命令樣本如下。

create table if not exists mf_math_fun_t(
     int_data     int,
     bigint_data  bigint,
     double_data  double,
     decimal_data decimal,
     float_data   float,
     string_data  string
    );
insert into mf_math_fun_t values
(null, -10, 0.525, 0.525BD, cast(0.525 as float), '10'),
(-20, null, -0.1, -0.1BD, cast(-0.1 as float), '-10'),
(0, -1, null, 20.45BD, cast(-1 as float), '30'),
(-40, 4, 0.89, null, cast(0.89 as float), '-30'),
(5, -50, -1, -1BD, null, '50'),
(-60, 6, 1.5, 1.5BD, cast(1.5 as float), '-50'),
(-1, -70, -7.5, -7.5BD, cast(-7.5 as float),null ),
(-80, 1, -10.2, -10.2BD, cast(-10.2 as float), '-1' ),
(9, -90, 2.58, 2.58BD, cast(2.58 as float), '0'),
(-100, 10, -5.8, -5.8BD, cast(-5.8 as float), '-90');

查詢表mf_math_fun_t中的資料,命令樣本如下:

select * from mf_math_fun_t;
--返回結果。
+----------+-------------+-------------+--------------+------------+-------------+
| int_data | bigint_data | double_data | decimal_data | float_data | string_data |
+----------+-------------+-------------+--------------+------------+-------------+
| NULL     | -10         | 0.525       | 0.525        | 0.525      | 10          |
| -20      | NULL        | -0.1        | -0.1         | -0.1       | -10         |
| 0        | -1          | NULL        | 20.45        | -1         | 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之間。expr1expr2值為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_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       |
      +------------+------------+-------------+------------+

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。

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,則返回報錯。

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

ISNAN

  • 命令格式

    boolean isnan(<expr>)
  • 命令說明

    判斷expr的值是否為NaN

  • 參數說明

    expr:必填。DOUBLE類型。輸入為STRING、BIGINT、DECIMAL類型時,會隱式轉換為DOUBLE類型後參與運算。

  • 傳回值說明

    • 如果expr的值為NaN,返回True,否則返回False。

    • expr的值為NULL時,返回False。

  • 樣本

    --返回False。
    SELECT isnan(100.1);

LN

  • 命令格式

    double|decimal ln(<number>)
  • 命令說明

    計算number的自然對數。

  • 參數說明

    number:必填。DOUBLE或DECIMAL類型。輸入為STRING、BIGINT類型時,會隱式轉換為DOUBLE類型後參與運算。

  • 傳回值說明

    返回DOUBLE或DECIMAL類型。返回規則如下:

    • number為DOUBLE、DECIMAL類型時會返回相應的類型。

    • number為STRING、BIGINT類型時,返回DOUBLE類型。

    • number值為負數或0時,返回NULL。

    • number值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回1.144729868791239。
      select ln(3.1415926);
      --返回NULL。
      select ln(null);
    • 表資料樣本

      基於樣本資料,計算自然對數值,命令樣本如下。

      select ln(bigint_data) as bigint_new, ln(double_data) as double_new, ln(decimal_data) as decimal_new, ln(string_data) as string_new from mf_math_fun_t;

      返回結果如下。

      +--------------------+----------------------+---------------------+---------------------+
      | bigint_new         | double_new           | decimal_new         | string_new          |
      +--------------------+----------------------+---------------------+---------------------+
      | NULL               | -0.6443570163905132  | -0.6443570163905132 | 2.302585092994046   |
      | NULL               | NULL                 | NULL                | NULL                |
      | NULL               | NULL                 | 3.017982882488811   | 3.4011973816621555  |
      | 1.3862943611198906 | -0.11653381625595151 | NULL                | NULL                |
      | NULL               | NULL                 | NULL                | 3.912023005428146   |
      | 1.791759469228055  | 0.4054651081081644   | 0.4054651081081644  | NULL                |
      | NULL               | NULL                 | NULL                | NULL                |
      | 0.0                | NULL                 | NULL                | NULL                |
      | NULL               | 0.9477893989335261   | 0.9477893989335261  | NULL                |
      | 2.302585092994046  | NULL                 | NULL                | NULL                |
      +--------------------+----------------------+---------------------+---------------------+

LOG

  • 命令格式

    double log(<base>, <x>)
  • 命令說明

    計算以base為底的x的對數。

  • 參數說明

    • base:必填。底數。DOUBLE或DECIMAL類型。輸入為STRING、BIGINT類型時,會隱式轉換為DOUBLE類型後參與運算。

    • x:必填。待計算對數的值。DOUBLE或DECIMAL類型。輸入為STRING、BIGINT類型時,會隱式轉換為DOUBLE類型後參與運算。

  • 傳回值說明

    返回DOUBLE類型。 返回規則如下:

    • basex為NULL時,返回NULL。

    • basex為負數或0時,返回NULL。

    • 如果base為1(會引發一個除零行為),會返回NULL。

  • 樣本

    • 待用資料樣本

      --返回4.0。
      select log(2, 16);
      --返回NULL。
      select log(2, null);
    • 表資料樣本

      基於樣本資料,計算資料行以2為底的對數值,命令樣本如下。

      select log(2,bigint_data) as bigint_new, log(2,double_data) as double_new, log(2,decimal_data) as decimal_new, log(2,string_data) as string_new from mf_math_fun_t;

      返回結果如下。

      +--------------------+----------------------+--------------------+--------------------+
      | bigint_new         | double_new           | decimal_new        | string_new         |
      +--------------------+----------------------+--------------------+--------------------+
      | NULL               | -0.929610672108602   | -0.929610672108602 | 3.3219280948873626 |
      | NULL               | NULL                 | NULL               | NULL               |
      | NULL               | NULL                 | 4.354028938054387  | 4.906890595608519  |
      | 2.0                | -0.16812275880832692 | NULL               | NULL               |
      | NULL               | NULL                 | NULL               | 5.643856189774724  |
      | 2.584962500721156  | 0.5849625007211562   | 0.5849625007211562 | NULL               |
      | NULL               | NULL                 | NULL               | NULL               |
      | 0.0                | NULL                 | NULL               | NULL               |
      | NULL               | 1.3673710656485296   | 1.3673710656485296 | NULL               |
      | 3.3219280948873626 | NULL                 | NULL               | NULL               |
      +--------------------+----------------------+--------------------+--------------------+

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>)
  • 命令說明

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

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類型時,返回報錯。

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

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

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截取到指定小數點位置。

    說明

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

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

相關文檔