このトピックでは、数学関数の基本的な構文について説明し、例を示します。
次の表に、Simple Log Service (SLS) がサポートする数学関数を示します。
-
次の演算子をサポートしています:
+-*/%
デフォルトでは、 / 演算子は結果の小数部を破棄します。小数部を保持するには、
x*1.0/yなどの操作を使用します。 -
Log Service の分析ステートメントでは、文字列を単一引用符 ('') で囲む必要があります。Log Service は、引用符で囲まれていないテキスト、または二重引用符 ("") で囲まれたテキストをフィールド名または列名として解釈します。たとえば、'status' は文字列 'status' を表し、status または "status" はログフィールド status を表します。
|
関数 |
構文 |
説明 |
SQL |
SPL |
|
abs(x) |
x の絶対値を返します。 |
√ |
√ |
|
|
acos(x) |
x のアークコサインを返します。 |
√ |
√ |
|
|
asin(x) |
x のアークサインを返します。 |
√ |
√ |
|
|
atan(x) |
x のアークタンジェントを返します。 |
√ |
√ |
|
|
atan2(x, y) |
y を x で除算した値のアークタンジェントを返します。 |
√ |
√ |
|
|
cbrt(x) |
x の立方根を返します。 |
√ |
√ |
|
|
ceil(x) |
x を最も近い整数に切り上げます。 この関数は ceiling 関数のエイリアスです。 |
√ |
√ |
|
|
ceiling(x) |
x を最も近い整数に切り上げます。 |
√ |
√ |
|
|
cos(x) |
x のコサインを返します。 |
√ |
√ |
|
|
cosh(x) |
x の双曲線コサインを返します。 |
√ |
√ |
|
|
cosine_similarity(x, y) |
x と y のコサイン類似度を返します。 |
√ |
× |
|
|
degrees(x) |
角度をラジアンから度に変換します。 |
√ |
√ |
|
|
e() |
自然対数の基数である e の値を返します。 |
√ |
√ |
|
|
exp(x) |
e の x 乗を返します。 |
√ |
× |
|
|
floor(x) |
x を最も近い整数に切り捨てます。 |
√ |
√ |
|
|
from_base(x, y) |
基数 y の文字列 x を数値に変換します。 |
√ |
√ |
|
|
ln(x) |
x の自然対数を返します。 |
√ |
√ |
|
|
infinity() |
正の無限大を表す値を返します。 |
√ |
√ |
|
|
is_nan(x) |
x が非数 (NaN) かどうかを確認します。 |
√ |
√ |
|
|
log2(x) |
x の底 2 の対数を返します。 |
√ |
√ |
|
|
log10(x) |
x の底 10 の対数を返します。 |
√ |
√ |
|
|
log(x, y) |
x の底 y の対数を返します。 |
√ |
× |
|
|
mod(x, y) |
x を y で除算したときの剰余を返します。 |
√ |
√ |
|
|
nan() |
NaN 値を返します。 |
√ |
√ |
|
|
pi() |
円周率 π の値を小数点以下 15 桁まで返します。 |
√ |
√ |
|
|
pow(x, y) |
x の y 乗を返します。 この関数は power 関数のエイリアスです。 |
√ |
√ |
|
|
power(x, y) |
x の y 乗を返します。 |
√ |
√ |
|
|
radians(x) |
角度を度からラジアンに変換します。 |
√ |
√ |
|
|
rand() |
乱数を返します。 |
√ |
√ |
|
|
random() |
範囲 [0, 1) の乱数を返します。 |
√ |
√ |
|
|
random(x) |
範囲 [0, x) の乱数を返します。 |
√ |
√ |
|
|
round(x) |
x を最も近い整数に丸めます。 |
√ |
√ |
|
|
round(x, n) |
x を小数点以下 n 桁に丸めます。 |
√ |
√ |
|
|
sign(x) |
x の符号を 1、0、-1 のいずれかで返します。 |
√ |
× |
|
|
sin(x) |
x のサインを返します。 |
√ |
√ |
|
|
sqrt(x) |
x の平方根を返します。 |
√ |
√ |
|
|
tan(x) |
x のタンジェントを返します。 |
√ |
√ |
|
|
tanh(x) |
x の双曲線タンジェントを返します。 |
√ |
√ |
|
|
to_base(x, y) |
数値 x を基数 y の文字列表現に変換します。 |
√ |
× |
|
|
truncate(x) |
x の小数部を削除します。 |
√ |
√ |
|
|
width_bucket(x, bound1, bound2, numBuckets) |
等幅のバケットに分割された範囲内で、x が属するバケットを返します。 |
√ |
× |
|
|
width_bucket(x, bins) |
配列を使用してバケットの範囲を指定し、x が属するバケットを返します。 |
√ |
× |
Abs 関数
Abs 関数は、 x の絶対値を計算します。
構文
abs(x)
パラメーター
|
パラメーター |
説明 |
|
x |
パラメーターには、smallint、integer、real、tinyint、bigint、double、または decimal を指定できます。 |
戻り値のデータ型
入力パラメーターと同じデータ型を返します。
例
-25 の絶対値を計算します。
-
クエリと分析文
* | select abs(-25) -
クエリと分析結果: 25
acos 関数
x のアークコサインを計算します。
構文
acos(x)
パラメーター
|
パラメーター |
説明 |
|
x |
このパラメーターは、範囲 [-1, 1] の double である必要があります。 値がこの範囲外の場合、この関数は NaN を返します。 |
戻り値のデータ型
double 型。
例
この例では、pi()/4 のアークコサインを計算します。
-
クエリ文
* | SELECT acos(pi()/4) -
クエリと分析結果:クエリは 0.6674572160283838 を返します。
asin 関数
x のアークサインを計算します。
構文
asin(x)
パラメーター
|
パラメーター |
説明 |
|
x |
[-1, 1] の範囲の double 値です。 値がこの範囲外の場合、この関数は NaN を返します。 |
戻り値のデータ型
double
例
π/4 のアークサインを計算します。
-
クエリと分析文
* | SELECT asin(pi()/4) -
クエリと分析結果:0.9033391101131845
Atan 関数
x のアークタンジェントを計算します。
構文
atan(x)
パラメーター
|
パラメーター |
説明 |
|
x |
値は double である必要があります。 |
戻り値のデータ型
double の値を返します。
例
この例では、円周率 / 4 のアークタンジェントを計算します。
-
クエリ文
* | SELECT atan(pi()/4) -
クエリ結果: 0.6657737500283538
atan2 関数
y を x で割った値のアークタンジェントを計算します。
構文
atan2(y, x)
パラメーター
|
パラメーター |
説明 |
|
y |
double 型の値です。 |
|
x |
double 型の値です。 |
戻り値のデータ型
double 型の値を返します。
例
π を 6 で割った値のアークタンジェントを計算します。
-
クエリ文
* | SELECT atan2(pi(),6) -
クエリ結果:戻り値は 0.48234790710102495 です。
Cbrt 関数
x の立方根を計算します。
構文
cbrt(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値です。 |
戻り値のデータ型
double 値を返します。
例
100 の立方根を計算します。
-
クエリ文:
* | select cbrt(100) -
クエリ結果:4.641588833612779
Ceil 関数
Ceil 関数は、 x を最も近い整数に切り上げます。Ceil 関数は、 ceiling 関数のエイリアスです。
構文
ceil(x)
パラメーター
|
パラメーター |
説明 |
|
x |
tinyint、 smallint、 integer、 real、 bigint、 double、または decimal データ型の値です。
|
戻り値のデータ型
戻り値は、パラメーターと同じデータ型です。
例
request_time フィールドの値を最も近い整数に切り上げます。
-
サンプルフィールド:
request_time:9.3 -
クエリ文:
* | SELECT ceil(request_time) AS request_time -
クエリ結果: request_time カラムの値は 10.0 です。
天井関数
天井関数は、x を自身以上の最小の整数に丸めます。
構文
ceiling(x)
パラメーター
|
パラメーター |
説明 |
|
x |
tinyint、smallint、integer、real、bigint、double、または DECIMAL 型の値です。
|
戻り値のデータ型
パラメーターと同じデータ型です。
例
request_time フィールドの値を、自身以上の最小の整数に丸めます。
-
サンプルフィールド:
request_time:9.3 -
クエリと分析文:
* | SELECT ceiling(request_time) AS request_time -
クエリと分析結果: request_time カラムの値は 10.0 です。
Cos 関数
x のコサインを計算します。
構文
cos(x)
パラメーター
|
パラメーター |
説明 |
|
x |
パラメーターは double 型である必要があります。 |
戻り値のデータ型
double 型を返します。
例
30 度のコサインを計算します。
-
クエリと分析文:
* | SELECT cos(pi()/6) -
クエリと分析結果:0.8660254037844387。
cosh 関数
cosh 関数は、x の双曲線余弦を計算します。
構文
cosh(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 型の値です。 |
戻り値のデータ型
double 型の値を返します。
例
値 pi()/6 の双曲線余弦を計算します。
-
クエリと分析文
* | SELECT cosh(pi()/6) -
クエリと分析結果: 1.1402383210764287。
cosine_similarity 関数
この関数は、x と y の間のコサイン類似度を計算します。
構文
cosine_similarity(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
マップ (varchar, double) 型です。 |
|
y |
マップ (varchar, double) 型です。 |
戻り値のデータ型
double 値を返します。
例
2 つのベクトル間のコサイン類似度を計算します。
-
クエリ
* | SELECT cosine_similarity(MAP(ARRAY['a'], ARRAY[1.0]), MAP(ARRAY['a'], ARRAY[2.0])) -
戻り値は 1.0 です。
degrees 関数
degrees 関数は、角度をラジアンから度に変換します。
構文
degrees(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値として指定される、ラジアン単位の角度。 |
戻り値のデータ型
度単位の等価な角度を double 値として返します。
例
円周率 π ラジアンを度に変換します。
-
クエリ文
* | SELECT degrees(pi()) -
クエリと分析の結果:結果は 180.0 です。
e 関数
e 関数は、自然対数の底である e の値を返します。
構文
e()
戻り値のデータ型
double 値です。
例
e の値を返します。
-
クエリ
* | SELECT e() -
クエリと分析の結果:戻り値は 2.718281828459045 です。
exp 関数
e の x 乗を計算します。
構文
exp(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値。 |
戻り値のデータ型
double 値です。
例
e の 3 乗を計算します。
-
クエリと分析文
* | SELECT exp(3) -
クエリと分析結果:戻り値は 20.085536923187669 です。
floor 関数
floor 関数は、x 以下の最大の整数値を返します。
構文
floor(x)
パラメーター
|
パラメーター |
説明 |
|
x |
値は、tinyint、smallint、integer、real、bigint、double、または decimal 型のいずれかです。
|
戻り値のデータ型
double 型の値を返します。
例
request_time フィールドの値を整数に切り捨てます。
-
サンプルフィールド
request_time:10.3 -
クエリ文
* | SELECT floor(request_time) AS request_time -
クエリと分析結果:request_time 列の値は 10.0 です。
from_base 関数
from_base 関数は、基数 y で表された文字列 x を数値に変換します。
構文
from_base(x, y)
パラメーター
|
引数 |
説明 |
|
x |
varchar 型の文字列です。 |
|
y |
数値の基数です。値は 2~36 の bigint である必要があります。 |
戻り値のデータ型
bigint を返します。
例
2 進数文字列 '1101' を 10 進数に変換します。
-
クエリ文
* | SELECT from_base('1101',2) -
結果: 戻り値は 13 です。
ln 関数
ln 関数は、x の自然対数を計算します。
構文
ln(x)
パラメーター
|
パラメーター |
説明 |
|
x |
0 より大きい double 値。 |
戻り値のデータ型
double 値。
例
この例では、2 の自然対数を計算します。
-
クエリと分析文
* | SELECT ln(2) -
クエリと分析結果: 0.6931471805599453 が返されます。
infinity 関数
infinity 関数は、正の無限大を返します。
構文
infinity()
戻り値のデータ型
double
例
正の無限大を返します。
-
クエリと分析文
* | SELECT infinity() -
クエリと分析結果: Infinity
is_nan 関数
is_nan 関数は、x が NaN (非数) の場合は true を返し、それ以外の場合は false を返します。
構文
is_nan(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値。 |
戻り値のデータ型
ブール値を返します。
例
status フィールドの値が NaN かどうかを確認します。
-
クエリと分析文
* | SELECT is_nan(status) -
クエリと分析結果: false が返されます。
log2 関数
log2 関数は、2 を底とするx の対数を計算します。
構文
log2(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値。 |
戻り値のデータ型
double 値を返します。
例
2 を底とする 100 の対数を計算します。
-
クエリと分析文:
* | SELECT log2(100) -
クエリと分析結果:戻り値は 6.643856189774725 です。
log10 関数
log10 関数は、x の 10 を底とする対数を計算します。
構文
log10(x)
パラメーター
|
パラメーター |
説明 |
|
x |
|
戻り値のデータ型
double 型の値を返します。
例
この例では、100 の 10 を底とする対数を計算します。
-
クエリと分析文
* | SELECT log10(100) -
クエリと分析結果: 2.0。
log 関数
log 関数は、x の、y を底とする対数を計算します。
構文
log(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
値は double 型である必要があります。 |
|
y |
値は double 型である必要があります。 |
戻り値のデータ型
double 型の値を返します。
例
5 を底とする 100 の対数を計算します。
-
クエリ
* | SELECT log(100,5) -
結果: 2.8613531161467867
mod 関数
mod 関数は、x を y で除算したときの剰余を返します。
構文
mod(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
tinyint, smallint, integer, real, bigint, double, または decimal 型の値です。 |
|
y |
tinyint, smallint, integer, real, bigint, double, または decimal 型の値です。 |
戻り値のデータ型
戻り値のデータ型は、入力パラメーターと同じです。
例
100 を 30 で除算したときの剰余を計算します。
-
クエリ文
* | SELECT mod(100,30) -
クエリと分析の結果: 10 を返します。
nan 関数
nan 関数は、NaN (非数) を返します。
構文
nan()
戻り値のデータ型
Double
例
NaN 値を返します。
-
クエリ文
* | SELECT nan() -
クエリ結果: 戻り値は NaN です。
PI 関数
この関数は、円周率の値を小数点以下 15 桁の精度で返します。
構文
pi()
戻り値のデータ型
double 型の値を返します。
例
この例では、円周率の値を返します。
-
クエリと分析文:
* | SELECT pi() -
クエリと分析結果:3.141592653589793
pow 関数
pow 関数は、x の y 乗を返します。power 関数のエイリアスです。
構文
pow(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値。 |
|
y |
double 値。 |
戻り値のデータ型
double 値を返します。
例
2 の 5 乗を計算します。
-
クエリ文:
* | SELECT pow(2,5) -
クエリと分析結果: 32.0
POWER 関数
x の y 乗を返します。
構文
power(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値です。 |
|
y |
double 値です。 |
戻り値のデータ型
double 値です。
例
2 の 5 乗を計算します。
-
クエリと分析文
* | SELECT power(2,5) -
クエリと分析結果: 32.0 を返します。
radians 関数
角度を度からラジアンに変換します。
構文
radians(x)
パラメーター
|
パラメーター |
説明 |
|
x |
|
戻り値のデータ型
double を返します。
例
180 度をラジアンに変換します。
-
クエリ文
* | SELECT radians(180) -
クエリ結果: 3.141592653589793
rand 関数
rand 関数は乱数を返します。
構文
rand()
戻り値のデータ型
double
例
次のクエリは乱数を返します。
-
クエリ文
* | select rand() -
クエリと分析の結果: 0.8742241064002435 などのランダムな値を返します。
RANDOM 関数
RANDOM 関数は、[0, x) の範囲で乱数を返します。
構文
-
[0, 1.0) の範囲でランダムな倍精度値を返します。
random() -
[0, x) の範囲でランダムな整数を返します。
random(x)
パラメーター
|
パラメーター |
説明 |
|
x |
tinyint、smallint、整数、または bigint 値です。 |
戻り値のデータ型
入力パラメーターと同じデータ型の値を返します。
例
[0, 100) の範囲で乱数を生成します。
-
クエリ文
* | select random(100) -
クエリ結果: ランダムな整数。 例: 44
ROUND 関数
ROUND 関数は、x を丸める関数です。 n を指定した場合、x を小数点以下 n 桁に丸めます。 n を省略した場合は、x を最も近い整数に丸めます。
構文
-
x を最も近い整数に丸めます。
round(x) -
x を小数点以下 n 桁に丸めます。
round(x, n)
パラメーター
|
パラメーター |
説明 |
|
x |
tinyint、smallint、整数、または bigint 値です。 |
|
n |
保持する小数点以下の桁数です。 |
戻り値のデータ型
戻り値はパラメーター x と同じデータ型です。
例
この例では、今日のページビュー (PV) を昨日のものと比較し、その変化をパーセンテージで表します。
-
クエリ文
* | SELECT diff [1] AS today, round((diff [3] -1.0) * 100, 2) AS growth FROM (SELECT compare(pv, 86400) as diff FROM (SELECT COUNT(*) as pv FROM website_log)) -
クエリは、today の値として 1564075.0 を、growth の値として -22.11 を返します。
SIGN 関数
SIGN 関数は、x の符号を 1、0、または -1 として返します。
構文
sign(x)
パラメーター
|
パラメーター |
説明 |
|
x |
評価する数値式です。データ型は、integer、smallint、tinyint、real、double、bigint、または DECIMAL(p,s) です。
|
戻り値のデータ型
入力パラメーターと同じデータ型を返します。
例
数値 10 の符号を計算します。
-
クエリ文
* | SELECT sign(10) -
クエリ結果:戻り値は 1 です。
sin 関数
この関数は、x のサインを計算します。
構文
sin(x)
パラメーター
|
パラメーター |
説明 |
|
x |
角度をラジアン単位で表す double 値。 |
戻り値のデータ型
double 値を返します。
例
この例では、90 度 (π/2 ラジアン) のサインを計算します。
-
クエリと分析文
* | select sin(pi()/2) -
クエリと分析結果:1.0 が返されます。
Sqrt 関数
x の平方根を計算します。
構文
sqrt(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 型の値です。 |
戻り値のデータ型
double 型の値を返します。
例
100 の平方根を計算します。
-
クエリと分析のステートメント
* | select sqrt(100) -
クエリと分析の結果: 10.0 です。
tan 関数
tan 関数は、x のタンジェントを計算します。
構文
tan(x)
パラメーター
|
パラメーター |
説明 |
|
x |
倍精度の値 |
戻り値のデータ型
倍精度の値
例
30 度のタンジェントを計算します。
-
クエリ文
* | SELECT tan(pi()/6) -
クエリ結果: 0.5773502691896257
tanh 関数
tanh 関数は、x の双曲線正接を計算します。
構文
tanh(x)
パラメーター
|
パラメーター |
説明 |
|
x |
|
戻り値のデータ型
double 型の値を返します。
例
この例では、π/6 ラジアン (30 度) の双曲線正接を計算します。
-
クエリ
* | SELECT tanh(pi()/6) -
クエリ結果: 0.4804727781564516 が返されます。
to_base 関数
この関数は、bigint x を基数 y の文字列表現に変換します。
構文
to_base(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
変換する bigint です。 |
|
y |
出力文字列の基数です。値は 2 から 36 までの (両端を含む) bigint である必要があります。 |
戻り値のデータ型
varchar 型の値を返します。
例
180 をバイナリ文字列に変換します。
-
クエリ文
* | SELECT to_base(180, 2) -
クエリ結果: 10110100
truncate 関数
truncate 関数は、x の小数部を切り捨てます。
構文
truncate(x)
パラメーター
|
パラメーター |
説明 |
|
x |
double 値です。 |
戻り値のデータ型
double 値を返します。
例
11.11 の小数部を切り捨てます。
-
クエリ文
* | SELECT truncate(11.11) -
クエリ結果: 11.0
width_bucket 関数
width_bucket 関数は、値 x に対するバケット番号を返します。
構文
-
数値範囲を指定された数の等幅のバケットに分割し、x のバケット番号を返します。
width_bucket(x, bound1, bound2, numBuckets) -
指定されたバケット境界の配列に基づいて、x のバケット番号を返します。
width_bucket(x, bins)
パラメーター
|
パラメーター |
説明 |
|
x |
バケットに分類するための値です。この値は double 型である必要があります。 |
|
bound1 |
数値範囲の下限を指定します。 |
|
bound2 |
数値範囲の上限を指定します。 |
|
numBuckets |
バケットの数です。値は 0 より大きい整数である必要があります。 |
|
bins |
double 型の配列 bins を使用して、バケットの範囲を指定します。 |
戻り値のデータ型
bigint 型の値を返します。
-
x が指定された範囲内にある場合、x が属するバケットが返されます。
-
x が下限値を下回る場合、関数は 0 を返します。
-
x が上限値以上の場合、関数は numBuckets+1 を返します。
例
-
例 1: 数値範囲 [10, 80) を 7 つの等幅バケットに分割し、request_time フィールドの各値のバケット番号を返します。
-
クエリ文
* | SELECT request_time, width_bucket(request_time, 10, 80,7) AS numBuckets -
クエリと分析の結果: クエリは request_time と numBuckets 列を返します。これらの列は、各リクエスト時間に対応するバケット番号を示します。たとえば、request_time が 26.0 の場合、numBuckets は 2 で、request_time が 49.0 の場合、numBuckets は 4 です。
-
-
例 2: 配列を使用してバケット境界を定義し、request_time フィールドの各値のバケット番号を返します。
-
クエリ文
* | SELECT request_time, width_bucket(request_time, array[10,20,30,40,50,60,70,80]) AS numBuckets -
クエリと分析の結果: クエリは request_time と numBuckets 列を返します。これらの列は、カスタム境界配列に基づいて各リクエスト時間に割り当てられるバケット番号を示します。たとえば、request_time が 26.0 の場合、numBuckets は 2 で、request_time が 54.0 の場合、numBuckets は 5 です。
-