ここでは、MaxCompute SQL で使用できる算術関数コマンドと実行方法について説明します。
ABS
Double abs(Double number)
Bigint abs(Bigint number)
Decimal abs(Decimal number)
使用法:
絶対値を返します。
パラメーターの説明:
- 入力値が 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
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)
使用法:
数値の自然対数が返されます。
パラメーターの説明:
- 入力値が 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 型に変換されます。 入力値がそれ以外のデータ型の場合は、エラーが発生します。
戻り値:
- 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 の新規算術関数
set odps.sql.type.system.odps2=true;
新しい拡張機能は次のとおりです。
LOG2
Double log2(Double number)
Double log2(Decimal number)
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)
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)
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)
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.
set odps.sql.type.system.odps2=true;
を追加して、SQL 文と一緒に送信します。
UNHEX
BINARY unhex(String number)
set odps.sql.type.system.odps2=true;
を追加します。
使用法:
指定した 16 進数文字列で表される文字列を返します。
パラメーターの説明:
number: 16 進数の文字列です。
戻り値:
Binary 型が返されます。 入力値がゼロの場合、失敗が返されます。 入力値が NULL の場合、NULL が返されます。
Unhex ('616263') = 'abc'
unhex(616263)='abc'
RADIANS
Double radians(Double number)
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)
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)
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()
set odps.sql.type.system.odps2=true;
を追加します。
使用法:
この関数は e 値を返すために使用します。
戻り値:
Double 型が返されます。
e()=2.718281828459045
PI
Double pi()
set odps.sql.type.system.odps2=true;
を追加します。
使用法:
この関数は π 値を返すために使用します。
戻り値:
Double 型が返されます。
pi()=3.141592653589793
FACTORIAL
Bigint factorial(Int number)
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)
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)
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)
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)
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 にシフト)