集計関数は、値のセットから単一の値を計算します。このトピックでは、集計関数の基本的な構文と使用例について説明します。
Simple Log Service は、次の集計関数をサポートしています。
パラメーター | 構文 | 説明 | SQL サポート | SPL サポート |
arbitrary(x) | x から NULL でない任意の値を返します。 | √ | × | |
avg(x) | x の算術平均を計算します。 | √ | × | |
bitwise_and_agg(x) | x 内のすべての値のビット単位の AND を返します。 | √ | × | |
bitwise_or_agg(x) | x 内のすべての値のビット単位の OR を返します。 | √ | × | |
bool_and(boolean expression) | すべてのログが条件を満たす場合に true を返します。
| √ | × | |
bool_or(boolean expression) | 少なくとも 1 つのログが条件を満たす場合に true を返します。 | √ | × | |
checksum(x) | x のチェックサムを計算します。 | √ | × | |
count(*) | ログの総数を返します。 | √ | × | |
count(1) | ログの総数を返します。これは | √ | × | |
count(x) | x の値が NULL でないログの数を返します。 | √ | × | |
count_if(boolean expression) | 指定された条件を満たすログの数を返します。 | √ | × | |
every(boolean expression) | すべてのログが条件を満たす場合に true を返します。
| √ | × | |
geometric_mean(x) | x の幾何平均を計算します。 | √ | × | |
kurtosis(x) | x の尖度を計算します。 | √ | × | |
map_union(x) | 列内のマップの和集合を返します。あるキーが複数のマップに存在する場合、そのキーに対する任意の値が選択されます。 | √ | × | |
max(x) | x 内の最大値を返します。 | √ | × | |
max(x, n) | x 内の n 個の最大値を配列として返します。 | √ | × | |
max_by(x, y) | y の最大値に関連付けられた x の値を返します。 | √ | × | |
max_by(x, y, n) | y の n 個の最大値に対応する x の値の配列を返します。 | √ | × | |
min(x) | x 内の最小値を返します。 | √ | × | |
min(x, n) | x 内の n 個の最小値を配列として返します。 | √ | × | |
min_by(x, y) | y の最小値に関連付けられた x の値を返します。 | √ | × | |
min_by(x, y, n) | y の n 個の最小値に対応する x の値の配列を返します。 | √ | × | |
skewness(x) | x の歪度を計算します。 | √ | × | |
sum(x) | x の合計を計算します。 | √ | × |
Arbitrary 関数
arbitrary 関数は、式 x から NULL でない任意の値を返します。
構文
arbitrary(x)パラメーター
パラメーター | 説明 |
x | 任意のデータ型の式。 |
戻り値の型
入力式と同じデータ型です。
例
request_method フィールドから NULL でない任意の値を返します。
クエリ文 (デバッグ)
* | SELECT arbitrary(request_method) AS request_methodrequest_method 列は
GETのような値を返します。
Avg 関数
avg 関数は、x 内の値の平均を返します。
構文
avg(x)パラメーター
パラメーター | 説明 |
x | 平均を計算する列または式。値は double、bigint、decimal、または real 型である必要があります。 |
戻り値の型
double 型の値。
例
平均レイテンシーが 1,000 マイクロ秒を超えるプロジェクトを返します。
クエリ文 (デバッグ)
method: PostLogstoreLogs | SELECT avg(latency) AS avg_latency, Project GROUP BY Project HAVING avg_latency > 1000クエリは、avg_latency が
3223.4162679425835で、Project 名がdatalab-14で始まるレコードを返します。
bitwise_and_agg 関数
bitwise_and_agg 関数は、x 内のすべての値のビット単位の AND を返します。
構文
bitwise_and_agg(x)パラメーター
パラメーター | 説明 |
x | bigint 型の値。 |
戻り値の型
bigint 型の値。
例
status フィールドのすべての値に対してビット単位の AND 演算を実行します。
クエリ文 (デバッグ)
* | SELECT bitwise_and_agg(status)クエリは
_col0という名前の単一の列を返し、その値は0です。
Bitwise_or_agg 関数
bitwise_or_agg 関数は、x 内のすべての値に対するビット単位の OR 演算の結果を返します。
構文
bitwise_or_agg(x)パラメーター
パラメーター | 説明 |
x | bigint 型の値。 |
戻り値の型
bigint 型の値。
例
request_time フィールドのすべての値に対してビット単位の OR 演算を実行します。
クエリと分析文 (デバッグ)
* | SELECT bitwise_or_agg(request_length)クエリと分析の結果は、単一の列
_col0として返され、その値は16383です。
bool_and 関数
bool_and 関数は、すべてのログに対してブール式が true の場合に true を返します。この関数は every 関数と等価です。
構文
bool_and(boolean expression)パラメーター
パラメーター | 説明 |
boolean expression | 評価するブール式。 |
戻り値の型
boolean
例
この例では、すべてのログの request_time の値が 100 未満であるかどうかを確認します。
クエリと分析文 (デバッグ)
* | SELECT bool_and(request_time < 100)クエリと分析の結果は
trueであり、すべてのログのrequest_timeの値が 100 未満であることを示します。
bool_or 関数
bool_or 関数は、少なくとも 1 つのログに対してブール式が true の場合に true を返します。
構文
bool_or(boolean expression)パラメーター
パラメーター | 説明 |
boolean expression | ブール式。 |
戻り値の型
boolean
例
いずれかのログの request_time が 20 未満であるかどうかを確認するには:
クエリと分析文 (デバッグ)
* | SELECT bool_or(request_time < 20)クエリと分析の結果は、
_col0列に対してtrueを返します。これは、ログに request_time が 20 未満のレコードが含まれていることを示します。
Checksum 関数
checksum 関数は、x のチェックサムを計算します。
構文
checksum(x)パラメーター
パラメーター | 説明 |
x | 任意のデータ型の式。 |
戻り値の型
Base64 エンコードされた文字列。
例
クエリ文 (デバッグ)
* | SELECT checksum(request_method) AS request_methodrequest_method フィールドのチェックサムは
NDXFdgnd8GE=です。
Count 関数
count 関数はログをカウントします。
構文
ログの総数をカウントします。
count(*)ログの総数を返します。これは
count(*)と等価です。count(1)x が NULL でないログをカウントします。
count(x)
パラメーター
パラメーター | 説明 |
x | 任意のデータ型の式。 |
戻り値の型
整数。
例
count_if 関数
count_if 関数は、指定された条件を満たすログをカウントします。
構文
count_if(boolean expression)パラメーター
パラメーター | 説明 |
boolean expression | 評価する条件。 |
戻り値の型
条件を満たすログの数。
例
request_uri フィールドの値が file-0 で終わるログエントリの数をカウントします。
クエリと分析文 (デバッグ)
* | SELECT count_if(request_uri like '%file-0') AS countクエリと分析の結果
geometric_mean 関数
geometric_mean 関数は、x の幾何平均を計算します。
構文
geometric_mean(x)パラメーター
パラメーター | 説明 |
x | double、bigint、または real 型の値。 |
戻り値の型
double 型の値を返します。
例
リクエスト時間の幾何平均を計算します。
クエリと分析文 (デバッグ)
* | SELECT geometric_mean(request_time) AS timeクエリと分析の結果は、値が
39.443123208882308の time 列を示します。
すべての関数
every 関数は、すべてのログに対してブール式が true と評価された場合に true を返します。この関数は bool_and 関数と等価です。
構文
every(boolean expression)パラメーター
パラメーター | 説明 |
boolean expression | 各ログに対してブール値を返す式。 |
戻り値の型
ブール値を返します。
例
この例では、すべてのログの request_time の値が 100 未満であるかどうかを確認します。
クエリと分析文 (デバッグ)
* | SELECT every(request_time < 100)クエリと分析の結果
Kurtosis 関数
x の尖度を計算します。
構文
kurtosis(x)パラメーター
パラメーター | 説明 |
x | 値は double または bigint である必要があります。 |
戻り値の型
double
例
request_time フィールドの尖度を計算します。
クエリ文 (デバッグ)
*| SELECT kurtosis(request_time)クエリと分析の結果
kurtosis -3.0006998250171186
map_union 関数
map_union 関数は、列内のすべてのマップの和集合を返します。同じキーが複数の入力マップに存在する場合、結果のマップ内のそのキーの値は、入力のいずれかから非決定的に選択されます。
構文
map_union(x)パラメーター
パラメーター | 説明 |
x | map 型の列。 |
戻り値の型
map 型の単一の値を返します。
例
この例では、etl_context フィールドのマップ値を単一のマップに集計します。
サンプルフィールド
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" }クエリ文
* | SELECT map_union( try_cast(json_parse(etl_context) AS map(varchar, varchar)) )クエリと分析の結果:クエリ文の実行後、結果の列名は
_col0となり、値は etl_context から解析されたキーと値のペアのマップで、consumer_group、shard_id、project、logstore、consumerなどのフィールドとそれに対応する値が含まれます。
Max 関数
max 関数は、x の最大値を返します。
構文
x の最大値を返します。
max(x)x の n 個の最大値の配列を返します。
max(x, n)
パラメーター
パラメーター | 説明 |
x | 任意の式。 |
n | 正の整数。 |
戻り値の型
入力式と同じデータ型。
例
例 1:最大リクエスト時間を見つけます。
クエリ文 (デバッグ)
* | SELECT max(request_time) AS max_request_timeクエリと分析の結果:
max_request_timeの値は80.0です。
例 2:リクエスト時間の上位 10 件を見つけます。
クエリ文 (デバッグ)
* | SELECT max(request_time, 10) AS "top 10"クエリと分析の結果:クエリは top 10 列に対して
[80.0,80.0,80.0,80.0,80.0,79.0,79.0,79.0,78.0,78.0]を返します。配列には、降順でソートされた 10 個の最大のrequest_time値が含まれます。
Max_by 関数
max_by 関数は、次の 2 つの構文をサポートしています。
構文
y の最大値に対する x の値を返します。
max_by(x, y)y の n 個の最大値に対する x の値の配列を返します。
max_by(x, y, n)
パラメーター
パラメーター | 説明 |
x | 任意のデータ型の式。 |
y | 任意のデータ型の式。 |
n | 正の整数。 |
戻り値の型
x のデータ型と同じです。
例
例 1:税引前金額が最も高い注文の時刻を見つけます。
クエリと分析文
* | SELECT max_by(UsageEndTime, PretaxAmount) AS timeクエリと分析の結果:time 列は
1625731025を返します。
例 2:リクエスト時間が最も長い 3 つのリクエストのリクエストメソッドを見つけます。
クエリと分析文 (デバッグ)
* | SELECT max_by(request_method, request_time, 3) AS methodクエリと分析の結果:method の値は
["POST","POST","POST"]です。これは、request_timeでソートされた直近 3 つのリクエストのメソッドがすべて POST であることを示します。
min 関数
min 関数は、x 内の最小値を返します。
構文
x 内の最小値を返します。
min(x)x 内の n 個の最小値を配列として返します。
min(x,n)
パラメーター
パラメーター | 説明 |
x | 任意のデータ型の式。 |
n | 正の整数。 |
戻り値の型
入力式と同じデータ型。
例
min_by 関数
min_by 関数には、次の 2 つの構文があります。
構文
y の最小値に対する x の値を返します。
min_by(x, y)y の n 個の最小値に対する x の値の配列を返します。
min_by(x, y, n)
パラメーター
パラメーター | 説明 |
x | 任意のデータ型の式。 |
y | 任意のデータ型の式。 |
n | 正の整数。 |
戻り値の型
x パラメーターと同じデータ型。
例
Skewness 関数
skewness 関数は、式 x の歪度を計算します。
構文
skewness(x)パラメーター
パラメーター | 説明 |
x | double または bigint 型に評価される式。 |
戻り値の型
double
例
request_time フィールドの値の歪度を計算します。
クエリと分析文 (デバッグ)
*| SELECT skewness(request_time) AS skewnessクエリと分析の結果:skewness の値は
0.00042944441602043965です。
Sum 関数
sum 関数は、式 x 内の値を合計します。
構文
sum(x)パラメーター
パラメーター | 説明 |
x | double、bigint、decimal、または real 型に評価される式。 |
戻り値の型
入力式と同じデータ型。
例
Web サイトの日次トラフィックを計算します。
クエリと分析文 (デバッグ)
* | SELECT date_trunc('day', __time__) AS time, sum(body_bytes_sent) AS body_bytes_sent GROUP BY time ORDER BY timeクエリと分析の結果:クエリと分析文の実行後、日ごとに集計された統計結果テーブルが返され、2023-09-19 から 2023-09-23 までの合計 5 日間の
body_bytes_sentの合計が含まれます。