ここでは、MaxCompute SQL で使用できる算術関数コマンドと実行方法について説明します。

ABS

関数の定義:
Double abs(Double number)
Bigint abs(Bigint number)
Decimal abs(Decimal number)

使用法:

絶対値を返します。

パラメーターの説明:

number: Double 型、Bigint 型、Decimal 型の任意の数字です。
  • 入力値が Bigint 型の場合は、Bigint 型が返されます。
  • 入力値が Double 型の場合は、Double 型が返されます。
  • 入力値が Decimal 型の場合は、Decimal 型が返されます。

入力値が String 型の場合は、暗黙の型変換で Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

返される結果は、入力パラメーター値のデータ型によって異なります。 たとえば、入力パラメーター値が NULL の場合は NULL が返されます。

Bigint 型の入力値が Bigint 型の最大値を超える場合は、Double 型が返されます。 この場合、精度が欠けている可能性があります。

例:
abs(null) = null
abs(-1) = 1
abs(-1.2) = 1.2
abs("-2") = 2.0
abs(122320837456298376592387456923748) = 1.2232083745629837e32
以下は、SQLで ABS 関数を使用する場合の例です。 他の組み込み関数 (ウィンドウ関数と集約関数を除く) の使用方法と似ています。
select abs(id) from tbl1;
-- tbl1 の id フィールド絶対値を取り出します。

ACOS

関数の定義:
Double acos(Double number)
Decimal acos(Decimal number)

使用法:

数値の逆余弦を計算します。

パラメーターの説明:

number: Double 型または Decima 型で、 -1<=number <=1です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。値は 0 から π の間です。 数値が NULL の場合は、NULL が返されます。

例:
acos("0.87") = 0.5155940062460905
acos(0) = 1.5707963267948966

ASIN

関数の定義:
Double asin(Double number)
Decimal asin(Decimal number)

使用法:

数値の逆正弦関数を計算します。

パラメーターの説明:

number: Double 型または Decima 型で、-1<=number <=1 です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。値は -π/2 から π/2 の間です。 数値が NULL の場合は、NULL が返されます。

例:
asin(1) = 1.5707963267948966
asin(-1) = -1.5707963267948966

ATAN

関数の定義:
Double atan(Double number)

使用法:

数値のバックカット関数を計算します。

パラメーターの説明:

number: Double 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力パラメーター値がそれ以外のデータ型の場合、エラーが発生します。

戻り値:

Double 型が返されます。値は -π/2 から π/2 の間です。 数値が NULL の場合は、NULL が返されます。

例:
atan(1) = 0.7853981633974483
atan(-1) = -0.7853981633974483

CEIL

関数の定義:
Bigint ceil(Double value)
Bigint ceil(Decimal value)

使用法:

この関数は、引数以上で最小の整数値を返します。

パラメーターの説明:

value: Double 型または Decimal 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合、エラーが発生します。

戻り値:

Bigint 型が返されます。 数値が NULL の場合は、NULL が返されます。

例:
ceil(1.1) = 2
ceil(-1.1) = -1

CONV

関数の定義:
String conv(String input, Bigint from_base, Bigint to_base)

使用法:

数値を 16 進数に変換します。

パラメーターの説明:
  • input: 変換対象の整数で、 String 型で表します。 Bigint 型および Double 型の場合、暗黙の変換で String 型に変換されます。
  • from_base, to_base: Decimal 値です。使用できる値は、2、8、10、16 です。 Bigint 型および Double 型の場合、暗黙の変換で String 型に変換されます。

戻り値:

String 型が返されます。 数値が NULL の場合は、NULL が返されます。 変換プロセスは、64 ビット精度で実行されます。 オーバーフローが発生すると、例外が発生します。 入力値が負の値 (「 - 」で始まる) の場合、例外が発生します。 入力値が 10 進数の場合は、16 進数変換の前に整数に変換されます。 小数部は除外されます。

例:
conv('1100', 2, 10) = '12'
conv('1100', 2, 16) = 'c'
conv('ab', 16, 10) = '171'
conv('ab', 16, 16) = 'ab'

COS

関数の定義:
Double cos(Double number)
Decimal cos(Decimal number)

使用法:

入力はラジアン値です。

パラメーターの説明:

number: Double 型または Decimal 型です。 入力値が String 型の場合は、暗黙の型変換で Double 型に変換されます。 入力値がそれ以外のデータ型の場合、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

例:
cos(3.1415926/2)=2.6794896585028633e-8
cos(3.1415926)=-0.9999999999999986

COSH

関数の定義:
Double cosh(Double number)
Decimal cosh(Decimal number)

使用法:

双曲線余弦関数です

パラメーターの説明:

number: Double 型または Decimal 型です。 入力値が String 型の場合は、暗黙の型変換で Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

COT

関数の定義:
Double cot(Double number)
Decimal cot(Decimal number)

使用法:

ラジアン値を入力します。

パラメーターの説明:

number: Double 型または Decimal 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

EXP

関数の定義:
Double exp(Double number)
Decimal exp(Decimal number)

使用法:

指数関数です。

戻り値:

数値の絶対値が返されます。

パラメーターの説明:

number: Double 型または Decimal 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

FLOOR

関数の定義:
Bigint floor(Double number)
Bigint floor(Decimal number)

使用法:

引数以下で最大の整数値が返されます。

パラメーターの説明:

number: Double 型または Decimal 型です。 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Bigint 型が返されます。入力値が NULL の場合は NULL が返されます。

例:
floor(1.2)=1
floor(1.9)=1
floor(0.1)=0
floor(-1.2)=-2
floor(-0.1)=-1
floor(0.0)=0
Floor (-0.0) = 0

LN

関数の定義:
Double ln(Double number)
Decimal ln(Decimal number)

使用法:

数値の自然対数が返されます。

パラメーターの説明:

number: Double 型または Decimal 型です。
  • 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。
  • 数値が NULL の場合は、NULL が返されます。 number が負または 0 の場合、例外が発生します。

戻り値:

Double 型または Decimal 型が返されます。

LOG

関数の定義:
Double log(Double base, Double x)
Decimal log (decimal base, decimal X)

使用法:

基数が base の x の対数を返します。

パラメーターの説明:
  • number: Double 型または Decimal 型です。 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。
  • x: Double 型または Decimal 型です。 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型の対数値が返されます。
  • base または x が NULL の場合、NULL が返されます。
  • base または x の一方が負またはゼロの場合、異常の原因となります。
  • base が 1 の場合も、異常の原因になります。

POW

関数の定義:
Double pow(Double x, Double y)
Decimal pow(Decimal x, Decimal y)

使用法:

x の y 乗、つまり x ^ y が返されます。

パラメーターの説明:
  • X: Double 型または Decimal 型です。 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。
  • Y: Double 型または Decimal 型です。 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 X または Y が NULL の場合、NULL が返されます。

RAND

関数の定義:
Double rand(Bigint seed)

使用法:

乱数 (行ごとに異なる) が返されます。シードを指定すると、生成された乱数列が確定的であることが確認されます。戻り値の範囲は 0 から 1 です。

パラメーターの説明:

seed: Bigint 型です。乱数列のシードにより、乱数列の開始値が決定されます。

戻り値:

Double 型が返されます。

例:
select rand() from dual;
select rand(1) from dual;

ROUND

関数の定義:
Double round(Double number, [Bigint Decimal_places])
Decimal round(Decimal number, [Bigint Decimal_places])

使用法:

特定の小数点位置に四捨五入します。

パラメーターの説明:
  • number: Double 型または Decimal 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。
  • Decimal_place: Bigint 型の定数で、四捨五入する小数点からの位置です。 それ以外のデータ型の場合は、例外が発生します。このパラメータを省略すると、1 の位に四捨五入されます。 デフォルト値は 0 です。

戻り値:

Double 型または Decimal 型が返されます。number または Decimal_places が NULL の場合、NULL が返されます。

Decimal_places は負になることがあります。 負数の場合、小数点から左へ数えられます。 小数部は削除されます。 decimal_place が整数部分より長い場合、0 が返されます。

例:
round(125.315) = 125.0
round(125.315, 0) = 125.0
Round (125.315, 1) = 125.3
round(125.315, 2) = 125.32
round(125.315, 3) = 125.315
round(-125.315, 2) = -125.32
round(123.345, -2) = 100.0
round(null) = null
round(123.345, 4) = 123.345
round(123.345, -4) = 0.0

SIN

関数の定義:
Double sin(Double number)
Decimal sin(Decimal number)

使用法:

数値の正弦関数を計算します。入力はラジアン値です。

パラメーターの説明:

number: Double 型または Decimal 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

SINH

関数の定義:
Double sinh(Double number)
Decimal sinh(Decimal number)

使用法:

数値の逆正弦関数を計算します。

パラメーターの説明:

number: Double 型または Decimal 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

SQRT

関数の定義:
Double sqrt(Double number)
Decimal sqrt(Decimal number)

使用法:

数値の平方根を計算します。

パラメーターの説明:

number: Double 型または Decimal 型で、ゼロより大きくなければなりません。ゼロ未満の場合、例外が発生します。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

TAN

関数の定義:
Double tan(Double number)
Decimal tan(Decimal number)

使用法:

数値の正接関数を計算します。入力はラジアン値です。

パラメーターの説明:

number: Double 型またはr Decimal 型です。 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

TANH

関数の定義:
Double tanh(Double number)
Decimal tanh(Decimal number)

使用法:

数値の双曲線正接関数を計算します。

パラメーターの説明:

number: Double 型または Decimal 型です。入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。

戻り値:

Double 型または Decimal 型が返されます。 数値が NULL の場合は、NULL が返されます。

TRUNC

関数の定義:
Double trunc(Double number[, Bigint Decimal_places])
Decimal trunc(Decimal number[, Bigint Decimal_places])

使用法:

この関数は、指定した小数の位まで、入力値を切り捨てる際に使用します。

パラメーターの説明:
  • number: Double 型または Decimal 型です。 入力値が String 型または Bigint 型の場合、暗黙の変換によって Double 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。
  • Decimal_places: Bigint 型の定数で、数値を切り捨てる小数の位です。 その他のデータ型は Bigint 型に変換されます。 このパラメーターを省略すると、小数第 1 位が切り捨てられます。

戻り値:

Double 型または Decimal 型が返されます。 number または Decimal_places が NULL の場合、 NULL が返されます。

  • Double 型が返される場合、返される結果の表示は、trunc(125.815, 1) のように予想通りにならない可能性があります (この問題はすべてのシステムに存在します)。
  • 切り捨てられる部分はゼロが補われます。
  • Decimal_places は、負にすることもできます。 負の場合は、小数点から左に数えられ、そこから小数点部分までが切り捨てられます。 Decimal_place が整数部分より長い場合、0 が返されます。
例:
trunc(125.815) = 125.0
trunc(125.815, 0) =125.0
trunc(125.815, 1) = 125.80000000000001
trunc(125.815, 2) = 125.81
trunc(125.815, 3) = 125.815
trunc(-125.815, 2) = -125.81
trunc(125.815, -1) = 120.0
trunc(125.815, -2) = 100.0
trunc(125.815, -3) = 0.0
trunc(123.345, 4) = 123.345
trunc(123.345, -4) = 0.0

Maxcomputerte2.0 の新規算術関数

MaxCompute 2.0 へのアップグレードに伴い、算術関数がいくつか追加されました。 新規関数で新規データ型を使用する場合は、新規関数の SQL 文を使用する前に、次の set 文を追加します。
set odps.sql.type.system.odps2=true;

新しい拡張機能は次のとおりです。

LOG2

関数の定義:
Double log2(Double number)
Double log2(Decimal number)
新規のデータ型関数を使用するには、LOG2 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

特定の数の 2 を底とする対数を返します。

パラメーターの説明:

number: Double 型または Decimal 型。

戻り値:

Double 型。 入力値がゼロまたは NULL の場合、戻り値は NULL になります。

以下に例を示します。
log2(null)=null
log2(0)=null
log2(8)=3.0

LOG10

関数の定義:
Double log10(Double number)
Double log10(Decimal number)
新規のデータ型関数を使用するには、LOG10 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

特定の数の 10 を底とする対数を返します。

パラメーターの説明:

number: Double 型または Decimal 型。

戻り値:

Double 型が返されます。 入力値がゼロまたは NULL の場合、戻り値は NULL になります。

以下に例を示します。
log10(null)=null
log10(0)=null
log10(8)=0.9030899869919435

BIN

関数の定義:
String bin(Bigint number)
新規のデータ型関数を使用するには、BIN 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

特定の数値のバイナリコード式を返します。

パラメーターの説明:

number: Bigint 型。

戻り値:

String 型。 入力値がゼロの場合、ゼロが返されます。入力値が NULL の場合、NULL が返されます。

例:
bin(0)='0'
bin(null)='null'
bin(12)='1100'

HEX

関数の定義:
String hex(Bigint number) 
String hex(String number)
String hex (binary number)
新規のデータ型関数を使用するには、HEX 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数は、整数または文字を 16 進形式に変換するために使用します。

パラメーターの説明:

number: number が Bigint 型の場合、数値の 16 進形式が返されます。 この変数が String 型の場合、文字列の 16 進形式が返されます。

戻り値:

String 型が返されます。 入力値がゼロの場合、ゼロが返されます。入力値が NULL の場合、例外が返されます。

例:
hex(0)=0
hex('abc')='616263'
hex(17)='11'
hex('17')='3137'
hex(null) results in an exception and returns failed.
入力パラメータ値が Binary 型の場合、 新しいデータ型を使用するには、set odps.sql.type.system.odps2=true;を追加して、SQL 文と一緒に送信します。

UNHEX

関数の定義:
BINARY unhex(String number)
新規のデータ型関数を使用するには、UNHEX 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

指定した 16 進数文字列で表される文字列を返します。

パラメーターの説明:

number: 16 進数の文字列です。

戻り値:

Binary 型が返されます。 入力値がゼロの場合、失敗が返されます。 入力値が NULL の場合、NULL が返されます。

例:
Unhex ('616263') = 'abc'
unhex(616263)='abc'

RADIANS

関数の定義:
Double radians(Double number)
新規のデータ型関数を使用するには、RADIANS 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数は、度をラジアンに変換するために使用します。

パラメーターの説明:

number: Double 型。

戻り値:

Double 型が返されます。入力値が NULL の場合、NULL が返されます。

例:
radians(90)=1.5707963267948966
radians(0)=0.0
radians(null)=null

DEGREES

関数の定義:
Double degrees(Double number) 
Double degrees(Decimal number)
新規のデータ型関数を使用するには、DEGREES 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数はラジアンを度に変換するために使用します。

パラメーターの説明:

number: Double 型または Decimal 型。

戻り値:

Double データ型が返されます。 入力値が NULL の場合、NULL が返されます。

例:
degrees(1.5707963267948966)=90.0
degrees(0)=0.0
Degrees (null) = NULL

SIGN

関数の定義:
Double sign(Double number)
Double sign(Decimal number)
新規のデータ型関数を使用するには、SIGN 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

入力データの符号を適用します。 1.0 は正数、-1.0 は負数を表します。 それ以外の場合は、 0.0 が返されます。

パラメーターの説明:

number: Double 型または Decimal 型。

戻り値:

Double データ型が返されます。 入力値が 0 の場合、0.0 が返されます。 入力値が NULL の場合、NULL が返されます。

例:
sign(-2.5)=-1.0
Sign (2.5) = 1.0
sign(0)=0.0
sign(null)=null

E

関数の定義:
Double e()
新規のデータ型関数を使用するには、E 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数は e 値を返すために使用します。

戻り値:

Double 型が返されます。

例:
e()=2.718281828459045

PI

関数の定義:
Double pi()
新規のデータ型関数を使用するには、PI 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数は π 値を返すために使用します。

戻り値:

Double 型が返されます。

例:
pi()=3.141592653589793

FACTORIAL

関数の定義:
Bigint factorial(Int number)
新規のデータ型関数を使用するには、FACTORIAL 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数は、特定の数の階乗を返すために使用します。

パラメーターの説明:

number: Int 型のデータで、データの範囲は 0~20 です。

戻り値:

Bigint 型が返されます。入力値がゼロの場合、1 が返されます。 入力値が NULL または 0~20 の範囲外の場合、NULL が返されます。

例:
factorial(5)=120 --5! = 5*4*3*2*1 = 120

CBRT

関数の定義:
Double cbrt(Double number)
新規のデータ型関数を使用するには、CBRT 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数は、立方根を返すために使用します。

パラメーターの説明:

number: Double 型。

戻り値:

Double データ型が返されます。 入力値が NULL の場合、NULL が返されます。

例:
cbrt(8)=2
cbrt(null)=null

SHIFTLEFT

関数の定義:
Int shiftleft(Tinyint|Smallint|Int number1, Int number2)
Bigint shiftleft(Bigint number1, Int number2)
新規のデータ型関数を使用するには、SHIFTLEFT 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

指定した桁数分だけ左にシフトします。

パラメーターの説明:
  • number1: Tinyint 型、Smallint 型、Int 型、Bigint 型の整数。
  • number2: Int 型の整数。

戻り値:

Int 型または Bingint 型が返されます。

例:
shiftleft(1,2)=4  --バイナリ値 1 を左に 2 桁分シフトします (1<<2,0001 を 0100 にシフト)
shiftleft(4,3)=32  --バイナリ値 4 を左に 3 桁分シフトします (4<<3,0100 を 10,0000 にシフト)

SHIFTRIGHT

関数の定義:
Int shiftright(Tinyint|Smallint|Int number1, Int number2)
Bigint shiftright(Bigint number1, Int number2)
新規のデータ型関数を使用するには、SHIFTRIGHT 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

使用法:

この関数は、指定した桁数だけ右にシフトするために使用します。

パラメーターの説明:
  • number1: Tinyint 型、Smallint 型、Int 型、Bigint 型の整数。
  • number2: Int 型の整数。

戻り値:

Int 型または Bigint 型が返されます。

例:
shiftright(4,2)=1 -- バイナリ値 4 を右に 2 桁分シフトします (4>>2,0100 を 0001 にシフト)
shiftright(32,3)=4 -- バイナリ値 32 を右に 3 桁分シフトします (32>>3,100000 を 0100 にシフト)

SHIFTRIGHTUNSIGNED

コマンド形式は次のとおりです。
Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2)
Bigint shiftrightunsigned(Bigint number1, Int number2)
新規のデータ型関数を使用するには、SHIFTRIGHTUNSIGNED 関数を指定する SQL 文の前に、set odps.sql.type.system.odps2=true; を追加します。

コマンドの説明は次のとおりです。

この関数は、指定した桁数だけ、符号を付けずに右にシフトするために使用します。

パラメーターの説明:
  • number1: Tinyint 型、Smallint 型、Int 型、Bigint 型の整数。
  • number2: Int 型の整数。

戻り値:

Int 型または Bigint 型が返されます。

例:
shiftrightunsigned(8,2)=2 -- 符号なしバイナリ値 8 を右に 2 桁分シフトします (8>>>2,1000 を 0010 にシフト)
shiftrightunsigned(-14,2)=1073741820  -- 符号なしバイナリ値 -14 を右に 2 桁分シフトします (-14>>>2, 11111111 11111111 11111111 11110010 を 00111111 11111111 11111111 11111100 にシフト)