近似関数は、計算コストを抑えながら個別値のカウント、パーセンタイル、ヒストグラムを推定します。
Log Service は、以下の近似関数をサポートしています。
|
関数 |
構文 |
説明 |
SQL サポート |
SPL サポート |
|
approx_distinct(x) |
x 内の個別値の数を推定します。デフォルトの標準誤差は 2.3% です。 |
✔ |
❌ |
|
|
approx_distinct(x, e) |
カスタム標準誤差で x 内の個別値の数を推定します。 |
✔ |
❌ |
|
|
approx_percentile(x, percentage) |
x(昇順にソート)の近似 percentage パーセンタイルを返します。結果は近似値であり、安定性は保証されません。 |
✔ |
❌ |
|
|
approx_percentile(x, array[percentage01, percentage02...]) |
x の percentage01 および percentage02 パーセンタイル(昇順にソート)における近似値を返します。結果は近似値であり、安定性は保証されません。 |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage) |
percentage パーセンタイルの近似値を返します。x は x × weight で重み付けされ(昇順にソートされます)。結果は近似値であり、安定性は保証されません。 |
✔ |
❌ |
|
|
approx_percentile(x, weight, array[percentage01, percentage02...]) |
x の percentage01 および percentage02 パーセンタイルにおける近似値を、x × weight で重み付けして返します。結果は近似値であり、安定性は保証されません。 |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage, accuracy) |
設定可能な精度で、percentage パーセンタイルの近似値を返します。この値は x のもので、x × 重みで重み付けされています。結果は安定性保証のない近似値です。 |
✔ |
❌ |
|
|
numeric_histogram(bucket, x) |
指定されたバケット数で x の近似ヒストグラムを計算します。JSON オブジェクトを返します。 |
✔ |
❌ |
|
|
numeric_histogram(bucket, x, weight) |
指定されたバケット数で x の重み付き近似ヒストグラムを計算します。JSON オブジェクトを返します。 |
✔ |
❌ |
|
|
numeric_histogram_u(bucket, x) |
指定されたバケット数で x の近似ヒストグラムを計算します。複数行・複数列のテーブルを返します。 |
✔ |
❌ |
|
|
|
カラム |
✔ |
❌ |
approx_distinct 関数
approx_distinct 関数は、x 内の個別値の数を推定します。
構文
-
x 内の個別値の数を推定します。デフォルトの標準誤差は 2.3% です。
approx_distinct(x) -
カスタム標準誤差で x 内の個別値の数を推定します。
approx_distinct(x, e)
パラメーター
|
パラメーター |
説明 |
|
x |
カラム名。任意のデータの型をサポートします。 |
|
e |
カスタム標準誤差。有効範囲:[0.0115, 0.26]。 |
戻り値の型
BIGINT
使用例
-
例 1:
client_ipフィールドに対して、countで PV を計算し、approx_distinctで UV を推定します。標準誤差は 2.3% です。-
クエリ文
* | SELECT count(*) AS PV, approx_distinct(client_ip) AS UV -
クエリ結果は、PV が 941,787、UV が 723,040 です。
-
-
例 2:
client_ipフィールドに対して、PV を計算し、カスタム標準誤差 10% で UV を推定します。-
クエリ文
* | SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV -
クエリ結果は、PV が 9,095、UV が 7,946 です。
-
approx_percentile 関数
approx_percentile 関数は、percentage で指定された x の近似パーセンタイルを返します。結果は近似値であり、安定性は保証されません。
構文
-
x(昇順にソート)の近似 percentage パーセンタイルを返します。戻り値の型:double。
approx_percentile(x, percentage) -
x の percentage01 および percentage02 パーセンタイル(昇順にソート)における近似値を返します。戻り値の型:array(double,double)。
approx_percentile(x, array[percentage01, percentage02...]) -
x × weight で重み付けされた x の近似 percentage パーセンタイルを返します。戻り値の型:
double。approx_percentile(x, weight, percentage) -
x × weight で重み付けされた x の percentage01 および percentage02 パーセンタイルにおける近似値を返します。戻り値の型:array(double,double)。
approx_percentile(x, weight, array[percentage01, percentage02...]) -
x × weight で重み付けされ、精度が設定可能な x の近似 percentage パーセンタイルを返します。戻り値の型:double。
approx_percentile(x, weight, percentage, accuracy)
パラメーター
|
パラメーター |
説明 |
|
x |
カラム名。DOUBLE 型である必要があります。 |
|
percentage |
パーセンタイル値。有効範囲:[0, 1]。 |
|
accuracy |
精度値。有効範囲:(0, 1)。 |
|
weight |
重み。1 より大きい整数である必要があります。 システムは、x × weight の積でソートします。 |
戻り値の型
DOUBLE または ARRAY(DOUBLE)
使用例
-
例 1:request_time の近似 50 パーセンタイル(中央値)を返します。
-
クエリ文
* | SELECT approx_percentile(request_time, 0.5) -
クエリ結果は
45.0で、これはrequest_timeの近似中央値(50 パーセンタイル)です。
-
-
例 2:request_time の近似 10、20、70 パーセンタイルを返します。
-
クエリ文
* | SELECT approx_percentile(request_time, array[0.1, 0.2, 0.7]) -
クエリ結果は
[17.0, 24.0, 59.0]で、これはそれぞれrequest_timeの 10、20、70 パーセンタイルにおける近似値です。
-
-
例 3:request_time の重み付き 50 パーセンタイルを返します。重みは request_time < 20 の場合 100、それ以外は 10 です。
-
クエリ文
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, 0.5 ) -
クエリ結果は
18.0です。
-
-
例 4:request_time の重み付き 80 および 90 パーセンタイルを返します。重みは 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] ) -
クエリ結果は
[48.0, 64.0]です。
-
-
例 5:request_time の重み付き 50 パーセンタイルを精度 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 オブジェクトとして返します。
構文
-
指定されたバケット数で x の近似ヒストグラムを計算します。
numeric_histogram(bucket, x) -
指定されたバケット数で x の重み付き近似ヒストグラムを計算します。
numeric_histogram(bucket, x, weight)
パラメーター
|
パラメーター |
説明 |
|
bucket |
ヒストグラムのバケット数。BIGINT 型である必要があります。 |
|
x |
カラム名。DOUBLE 型である必要があります。 |
|
weight |
重み。0 より大きい整数である必要があります。 システムは、x × weight の積で値をグループ化します。 |
戻り値の型
JSON
使用例
-
例 1:POST リクエストのリクエスト持続時間の近似ヒストグラムを計算します。
-
クエリ文
request_method:POST | SELECT numeric_histogram(10, request_time) -
バケットの上限値をキー、カウントを値とする JSON オブジェクトを返します。例:
"45.03638445951907":11351.0、"31.617058096415327":16180.0、"51.0979254315973":13786.0。
-
-
例 2:POST リクエストのリクエスト持続時間の重み付き近似ヒストグラムを計算します。
-
クエリ文
request_method:POST | SELECT numeric_histogram(10, request_time, CASE WHEN request_time<20 THEN 100 ELSE 10 END) -
数値範囲から頻度へのマッピングを含む 10 個のキーと値のペアを持つ JSON 列
_col0を返します。例:"60.63632633267428":268070.0、"76.41340599455032":275250.0、"15.028066666666671":1500000.0。
-
numeric_histogram_u 関数
numeric_histogram_u 関数は、指定されたバケット数で x の近似ヒストグラムを計算し、結果を複数行・複数列形式で返します。
構文
numeric_histogram_u(bucket, x)
パラメーター
|
パラメーター |
説明 |
|
bucket |
ヒストグラムのバケット数。BIGINT 型である必要があります。 |
|
x |
カラム名。DOUBLE 型である必要があります。 |
戻り値の型
bucket_avg および count カラムを持つテーブル。
使用例
POST リクエストのリクエスト持続時間の近似ヒストグラムを計算します。
-
クエリ文
request_method:POST | SELECT numeric_histogram_u(10, request_time) -
bucket_avg(バケットの平均値)およびcount(そのバケット内のアイテム数)の 2 つのカラムを持つ 10 行を返します。たとえば、最初のバケットはbucket_avgが 14.20、countが 18806.0 です。最後のバケットはbucket_avgが 70.78、countが 13442.0 です。
approx_most_frequent 関数
カラム x の上位 k 個の最頻値とその近似カウントを推定します。
構文
approx_most_frequent(k, x)
パラメーター
|
パラメーター |
説明 |
|
k |
返す最頻値の数。たとえば、5 を指定すると上位 5 つの値とその近似カウントが返されます。 |
|
x |
カラム名。VARCHAR 型である必要があります。 |
戻り値
map(VARCHAR, BIGINT)
使用例
content フィールドから最も出現頻度の高い 3 つの値を取得します。
-
サンプルデータ
content: 'A' 'B' 'A' 'C' 'A' 'B' 'C' 'D' 'E' -
クエリ文
SELECT approx_most_frequent(3, content) -
出力
クエリ結果は
{"A":3, "B":2, "C":2}です。