このトピックでは、近似関数の構文について説明します。 このトピックでは、関数の使用方法の例も示します。
次の表に、Simple Log Serviceでサポートされているおおよその機能を示します。
分析ステートメントで文字列を使用する場合は、文字列を単一引用符 (')で囲む必要があります。 二重引用符 (") で囲まれていない、または囲まれている文字列は、フィールド名または列名を示します。 例えば、 'status' はステータスの文字列を示し、status または "status" はステータスログフィールドを示します。
関数 | 構文 | 説明 | SQLでサポート | SPLでサポート |
approx_distinct( x) | xの異なる値の数を推定します。 デフォルトの標準エラーは2.3% です。 | √ | × | |
approx_distinct( x, e) | xの異なる値の数を推定します。 カスタム標準エラーを指定できます。 | √ | × | |
approx_percentile( x, percentage) | xの値を昇順でソートし、ほぼパーセントの位置にあるxの値を返します。 | √ | × | |
approx_percentile( x, array[ percentage01, percentage02 ...]) | xの値を昇順でソートし、ほぼpercentage01とpercentage02の位置にあるxの値を返します。 | √ | × | |
approx_percentile( x, weight, percentage) | xの値と重みの積に基づいてxの値を昇順にソートし、ほぼパーセンテージの位置にあるxの値を返します。 | √ | × | |
approx_percentile( x, weight, array[ percentage01, percentage02 ...]) | xの値と重みの積に基づいてxの値を昇順に並べ替え、おおよそpercentage01とpercentage02の位置にあるxの値を返します。 | √ | × | |
approx_percentile( x, weight, percentage, accuracy) | xの値と重みの積に基づいて、xの値を昇順にソートし、ほぼパーセンテージの位置にあるxの値を返します。 戻り値の精度を指定できます。 | √ | × | |
numeric_histogram( bucket, x) | バケットパラメーターで指定されたヒストグラムの列数に基づいて、xの近似ヒストグラムを返します。 戻り値はJSON型です。 | √ | × | |
numeric_histogram( bucket, x, weight) | バケットパラメーターで指定されたヒストグラムの列数に基づいて、xの近似ヒストグラムを返します。 戻り値はJSON型です。 xの値に重みを指定できます。 | √ | × | |
numeric_histogram_u( bucket, x) | バケットパラメーターで指定されたヒストグラムの列数に基づいて、xの近似ヒストグラムを返します。 戻り値には複数の行と列が含まれます。 | √ | × |
approx_distinct関数
approx_distinct関数は、xの異なる値の数を推定します。
構文
次の構文のapprox_distinct関数は、xの異なる値の数を推定します。 デフォルトの標準エラーは2.3% です。
approx_distinct(x)
次の構文のapprox_distinct関数は、xの異なる値の数を推定します。 カスタム標準エラーを指定できます。
approx_distinct(x, e)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意のデータ型です。 |
e | カスタム標準エラー。 有効な値: 0.0115〜0.26。 |
戻り値のデータ型
bigint型。
例
例1: カウント関数を使用して、ページビュー (PV) の数を計算します。 次に、approx_distinct関数を使用して、client_ipフィールドの一意の値を一意の訪問者 (UV) の数として推定します。 標準エラーは2.3% です。
クエリ文
* |SELECT count(*) AS PV, approx_distinct(client_ip) AS UV
クエリと分析結果
例2: count関数を使用してPVの数を計算します。 次に、approx_distinct関数を使用して、client_ipフィールドの一意の値をUVの数として推定します。 標準エラーは10% です。
クエリ文
* |SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV
クエリと分析結果
approx_percentile関数
approx_percentile関数は、xの値を昇順でソートし、おおよそパーセントの位置にあるxの値を返します。
構文
次の構文のapprox_percentile関数は、xの値を昇順でソートし、おおよそpercentageの位置にあるxの値を返します。 戻り値はdouble型です。
approx_percentile(x, percentage)
次の構文のapprox_percentile関数は、xの値を昇順でソートし、percentage01とpercentage02の位置にあるxの値を返します。 戻り値は配列 (double,double) 型です。
approx_percentile(x, array[percentage01, percentage02...])
次の構文のapprox_percentile関数は、xの値と重みの積に基づいてxの値を昇順にソートし、おおよそパーセント位置にあるxの値を返します。 戻り値はdouble型です。
approx_percentile(x, weight, percentage)
次の構文のapprox_percentile関数は、xの値と重みの積に基づいてxの値を昇順でソートし、percentage01とpercentage02の位置にあるxの値を返します。 戻り値は配列 (double,double) 型です。
approx_percentile(x, weight, array[percentage01, percentage02...])
次の構文のapprox_percentile関数は、xの値と重みの積に基づいてxの値を昇順にソートし、おおよそパーセント位置にあるxの値を返します。 戻り値はdouble型です。 戻り値の精度を指定できます。
approx_percentile(x, weight, percentage, accuracy)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はdouble型です。 |
パーセンテージ | パーセント値。 値の範囲: [0 , 1] |
精度 | 精度。 値の範囲: (0,1) |
重量 | 体重。 重みは1より大きい整数でなければなりません。 重みを指定すると、xの値と重みの積に基づいて、xの値が昇順にソートされます。 |
戻り値のデータ型
doubleまたはarray(double、double) タイプ。
例
例1: request_time列の値を昇順でソートし、ほぼ50% の位置にあるrequest_timeフィールドの値を返します。
クエリ文
*| SELECT approx_percentile(request_time,0.5)
クエリと分析結果
例2: request_time列の値を昇順でソートし、ほぼ10% 、20% 、および70% の位置にあるrequest_timeフィールドの値を返します。
クエリ文
*| SELECT approx_percentile(request_time,array[0.1,0.2,0.7])
クエリと分析結果
例3: request_time列の値と重みの積に基づいて、request_time列の値を昇順でソートし、ほぼ50% の位置にあるrequets_timeフィールドの値を返します。 request_timeの値が20未満の場合、重みは100である。 それ以外の場合、重量は10です。
クエリ文
* | SELECT approx_percentile( request_time,case when request_time < 20 then 100 else 10 end, 0.5 )
クエリと分析結果
例4: request_time列の値と重みの積に基づいてrequest_time列の値をソートし、ほぼ80% と90% の位置にあるrequest_timeフィールドの値を返します。 request_timeの値が20未満の場合、重みは100である。 それ以外の場合、重量は10です。
クエリ文
* | SELECT approx_percentile( request_time,case when request_time < 20 then 100 else 10 end, array [0.8,0.9] )
クエリと分析結果
例5: request_timeの値と重みの積に基づいてrequest_time列の値をソートし、ほぼ50% の位置にあるrequest_timeフィールドの値を返します。 精度は0.2です。 request_timeの値が20未満の場合、重みは100である。 それ以外の場合、重量は10です。
クエリ文
* | SELECT approx_percentile( request_time,case when request_time < 20 then 100 else 10 end, 0.5, 0.2 )
クエリと分析結果
numeric_histogram関数
numeric_histogram関数は、バケットパラメーターで指定されたヒストグラム列の数に基づいて、xの近似ヒストグラムを返します。 戻り値はJSON型です。
構文
次の構文のnumeric_histogram関数は、バケットパラメーターで指定されたヒストグラム列の数に基づいて、xの近似ヒストグラムを返します。
numeric_histogram(bucket, x)
次の構文のnumeric_histogram関数は、バケットパラメーターで指定されたヒストグラム列の数に基づいて、xの近似ヒストグラムを返します。 xの値に重みを指定できます。
numeric_histogram(bucket, x, weight)
パラメーター
パラメーター | 説明 |
バケット | ヒストグラムの列数。 このパラメーターの値はbigint型です。 |
x | このパラメーターの値はdouble型です。 |
重量 | 体重。 重みは0より大きい整数でなければなりません。 重みを指定すると、xの値と重みの積に基づいてxの値がグループ化されます。 |
戻り値のデータ型
JSON型。
例
例1: POSTメソッドのリクエスト期間のおおよそのヒストグラムを返します。
クエリ文
request_method:POST | SELECT numeric_histogram(10,request_time)
クエリと分析結果
例2: request_timeフィールドの値と重みの積に基づいて、request_timeフィールドの値をグループ化し、POSTメソッドのリクエスト期間の近似ヒストグラムを返します。
クエリ文
request_method:POST| SELECT numeric_histogram(10, request_time,case when request_time<20 then 100 else 10 end)
クエリと分析結果
numeric_histogram_u関数
numeric_histogram_u関数は、バケットパラメーターで指定されたヒストグラム列の数に基づいて、xの近似ヒストグラムを返します。 複数の行と列を含むテーブルが返されます。
構文
numeric_histogram_u(bucket, x)
パラメーター
パラメーター | 説明 |
バケット | ヒストグラムの列数。 このパラメーターの値はbigint型です。 |
x | このパラメーターの値はdouble型です。 |
戻り値のデータ型
ダブルタイプ。
例
POSTメソッドのリクエスト期間のおおよそのヒストグラムを返します。
クエリ文
request_method:POST | select numeric_histogram_u(10,request_time)
クエリと分析結果