집계 함수
집계 함수 (Aggregation Functions)
집계 함수는 여러 행에 걸쳐 계산을 수행해 단일 결과 값을 반환해요. 이 함수들은 stats, eventstats, streamstats 명령어와 함께 사용해 데이터를 분석하고 요약해요.
출처: 문서
본문
집계 함수는 여러 행에 걸쳐 계산을 수행해 단일 결과 값을 반환해요. 이 함수들은 stats, eventstats, streamstats 명령어와 함께 사용해 데이터를 분석하고 요약해요.
다음 표는 집계 함수가 NULL과 누락(missing) 값을 어떻게 처리하는지 보여줘요:
| 함수 | null | Missing |
|---|---|---|
| COUNT | 세지 않음 (Not counted) | 세지 않음 (Not counted) |
| SUM | 무시 (Ignored) | 무시 (Ignored) |
| AVG | 무시 (Ignored) | 무시 (Ignored) |
| MAX | 무시 (Ignored) | 무시 (Ignored) |
| MIN | 무시 (Ignored) | 무시 (Ignored) |
| FIRST | 무시 (Ignored) | 무시 (Ignored) |
| LAST | 무시 (Ignored) | 무시 (Ignored) |
| LIST | 무시 (Ignored) | 무시 (Ignored) |
| VALUES | 무시 (Ignored) | 무시 (Ignored) |
함수 (Functions)
PPL에서 데이터 분석과 요약에 사용할 수 있는 집계 함수는 다음과 같아요.
COUNT
사용법: COUNT(expr), C(expr), c(expr), count(expr)
가져온 행에서 expr 값의 개수를 세어요. C(), c(), count()는 COUNT()의 축약형으로 사용할 수 있어요. 필터링된 개수를 원한다면 eval 표현식을 사용해 필터링 조건을 지정해요.
매개변수:
expr(선택): 값을 셀 표현식이에요.
반환 타입: LONG
예제
source=accounts
| stats count(), c(), count, c
쿼리는 다음과 같은 결과를 반환해요:
count() | c() | count | c
4 | 4 | 4 | 4
다음 예제는 특정 조건과 일치하는 레코드만 셉니다:
source=accounts
| stats count(eval(age > 30)) as mature_users
쿼리는 다음과 같은 결과를 반환해요:
mature_users
3
SUM
사용법: SUM(expr)
expr 값의 합을 반환해요.
매개변수:
expr(필수): 값을 합산할 표현식이에요.
반환 타입: 입력 타입과 동일 (INTEGER, LONG, FLOAT, 또는 DOUBLE)
예제
source=accounts
| stats sum(age) by gender
쿼리는 다음과 같은 결과를 반환해요:
sum(age) | gender
28 | F
101 | M
AVG
사용법: AVG(expr)
expr의 평균값을 반환해요.
매개변수:
expr(필수): 평균을 계산할 표현식이에요.
반환 타입: 숫자 입력의 경우 DOUBLE; DATE, TIME, TIMESTAMP 입력의 경우 입력 타입과 동일
예제
source=accounts
| stats avg(age) by gender
쿼리는 다음과 같은 결과를 반환해요:
avg(age) | gender
28.0 | F
33.666666666666664 | M
MAX
사용법: MAX(expr)
expr의 최댓값을 반환해요. 숫자가 아닌 필드의 경우 알파벳 순서에서 마지막에 오는 값을 반환해요.
매개변수:
expr(필수): 최댓값을 찾을 표현식이에요.
반환 타입: 입력 타입과 동일
예제
source=accounts
| stats max(age)
쿼리는 다음과 같은 결과를 반환해요:
max(age)
36
다음 예제는 firstname 텍스트 필드에서 알파벳 순서로 마지막에 오는 값을 반환해요:
source=accounts
| stats max(firstname)
쿼리는 다음과 같은 결과를 반환해요:
max(firstname)
Nanette
MIN
사용법: MIN(expr)
expr의 최솟값을 반환해요. 숫자가 아닌 필드의 경우 알파벳 순서에서 처음에 오는 값을 반환해요.
매개변수:
expr(필수): 최솟값을 찾을 표현식이에요.
반환 타입: 입력 타입과 동일
예제
source=accounts
| stats min(age)
쿼리는 다음과 같은 결과를 반환해요:
min(age)
28
다음 예제는 firstname 텍스트 필드에서 알파벳 순서로 처음에 오는 값을 반환해요:
source=accounts
| stats min(firstname)
쿼리는 다음과 같은 결과를 반환해요:
min(firstname)
Amber
VAR_SAMP
사용법: VAR_SAMP(expr)
expr의 표본 분산(sample variance)을 반환해요.
매개변수:
expr(필수): 표본 분산을 계산할 표현식이에요.
반환 타입: DOUBLE
예제
source=accounts
| stats var_samp(age)
쿼리는 다음과 같은 결과를 반환해요:
var_samp(age)
10.916666666666666
VAR_POP
사용법: VAR_POP(expr)
expr의 모집단 분산(population variance)을 반환해요.
매개변수:
expr(필수): 모집단 분산을 계산할 표현식이에요.
반환 타입: DOUBLE
예제
source=accounts
| stats var_pop(age)
쿼리는 다음과 같은 결과를 반환해요:
var_pop(age)
8.1875
STDDEV_SAMP
사용법: STDDEV_SAMP(expr)
expr의 표본 표준편차(sample standard deviation)를 반환해요.
매개변수:
expr(필수): 표본 표준편차를 계산할 표현식이에요.
반환 타입: DOUBLE
예제
source=accounts
| stats stddev_samp(age)
쿼리는 다음과 같은 결과를 반환해요:
stddev_samp(age)
3.304037933599835
STDDEV_POP
사용법: STDDEV_POP(expr)
expr의 모집단 표준편차(population standard deviation)를 반환해요.
매개변수:
expr(필수): 모집단 표준편차를 계산할 표현식이에요.
반환 타입: DOUBLE
예제
source=accounts
| stats stddev_pop(age)
쿼리는 다음과 같은 결과를 반환해요:
stddev_pop(age)
2.8613807855648994
DISTINCT_COUNT, DC
사용법: DISTINCT_COUNT(expr), DC(expr)
HyperLogLog++ 알고리즘을 사용해 고유 값의 근사 개수를 반환해요. 두 함수는 동일해요. 알고리즘 정확도와 정밀도 제어에 대한 자세한 내용은 정밀도 제어 (Controlling precision)를 참고해요.
매개변수:
expr(필수): 고유 값을 셀 표현식이에요.
반환 타입: LONG
예제
source=accounts
| stats dc(state) as distinct_states, distinct_count(state) as dc_states_alt by gender
쿼리는 다음과 같은 결과를 반환해요:
distinct_states | dc_states_alt | gender
1 | 1 | F
3 | 3 | M
DISTINCT_COUNT_APPROX
사용법: DISTINCT_COUNT_APPROX(expr)
HyperLogLog++ 알고리즘을 사용해 expr의 고유 값 근사 개수를 반환해요.
매개변수:
expr(필수): 근사 고유 값을 셀 표현식이에요.
반환 타입: LONG
예제
source=accounts
| stats distinct_count_approx(gender)
쿼리는 다음과 같은 결과를 반환해요:
distinct_count_approx(gender)
2
EARLIEST
사용법: EARLIEST(field [, time_field])
타임스탬프 순서에 따라 필드의 가장 이른 값을 반환해요.
매개변수:
field(필수): 가장 이른 값을 반환할 필드예요.time_field(선택): 시간 기반 정렬에 사용할 필드예요. 지정하지 않으면@timestamp가 기본값이에요.
반환 타입: 입력 필드 타입과 동일
예제
source=events
| stats earliest(message) by host
| sort host
쿼리는 다음과 같은 결과를 반환해요:
earliest(message) | host
Starting up | server1
Initializing | server2
다음 예제는 정렬에 기본 @timestamp 필드 대신 사용자 지정 시간 필드를 사용해요:
source=events
| stats earliest(status, event_time) by category
| sort category
쿼리는 다음과 같은 결과를 반환해요:
earliest(status, event_time) | category
pending | orders
active | users
LATEST
사용법: LATEST(field [, time_field])
타임스탬프 순서에 따라 필드의 가장 최근 값을 반환해요.
매개변수:
field(필수): 가장 최근 값을 반환할 필드예요.time_field(선택): 시간 기반 정렬에 사용할 필드예요. 지정하지 않으면@timestamp가 기본값이에요.
반환 타입: 입력 필드 타입과 동일
예제
source=events
| stats latest(message) by host
| sort host
쿼리는 다음과 같은 결과를 반환해요:
latest(message) | host
Shutting down | server1
Maintenance mode | server2
다음 예제는 정렬에 기본 @timestamp 필드 대신 사용자 지정 시간 필드를 사용해요:
source=events
| stats latest(status, event_time) by category
| sort category
쿼리는 다음과 같은 결과를 반환해요:
latest(status, event_time) | category
cancelled | orders
inactive | users
TAKE
사용법: TAKE(field [, size])
필드에서 원래 값을 반환해요. 이 함수는 반환 값의 순서를 보장하지 않아요.
매개변수:
field(필수): 값을 추출할 텍스트 필드예요.size(선택): 반환할 값의 개수예요. 기본값은10이에요.
반환 타입: ARRAY
예제
source=accounts
| stats take(firstname)
쿼리는 다음과 같은 결과를 반환해요:
take(firstname)
[Amber,Hattie,Nanette,Dale]
PERCENTILE, PERCENTILE_APPROX
사용법: PERCENTILE(expr, percent), PERCENTILE_APPROX(expr, percent)
지정된 백분율에서 expr의 근사 백분위 값을 반환해요.
매개변수:
expr(필수): 백분위를 계산할 표현식이에요.percent(필수):0과100사이의 상수 숫자예요.
반환 타입: 입력 타입과 동일
버전 3.1.0부터 백분위 구현이 AVLTreeDigest에서 MergingDigest로 전환되었어요. 자세한 내용은 해당 이슈를 참고해요.
예제
source=accounts
| stats percentile(age, 90) by gender
쿼리는 다음과 같은 결과를 반환해요:
percentile(age, 90) | gender
28 | F
36 | M
백분위 축약 함수 (Percentile shortcut functions)
편의를 위해 OpenSearch PPL은 일반적인 백분위에 대한 축약 함수를 제공해요:
PERC<percent>(expr)-PERCENTILE(expr, <percent>)와 동일해요.P<percent>(expr)-PERCENTILE(expr, <percent>)와 동일해요.
0에서 100 사이의 정수 및 소수 백분위가 모두 지원돼요 (예: PERC95, P99.5):
source=accounts
| stats perc99.5(age);
쿼리는 다음과 같은 결과를 반환해요:
perc99.5(age)
36
source=accounts
| stats p50(age);
쿼리는 다음과 같은 결과를 반환해요:
p50(age)
33
MEDIAN
사용법: MEDIAN(expr)
expr의 중앙값(50번째 백분위)을 반환해요. PERCENTILE(expr, 50)과 동일해요.
매개변수:
expr(필수): 중앙값을 계산할 표현식이에요.
반환 타입: 입력 타입과 동일
예제
source=accounts
| stats median(age)
쿼리는 다음과 같은 결과를 반환해요:
median(age)
33
FIRST
사용법: FIRST(field)
자연 문서 순서에 따라 필드의 첫 번째 non-null 값을 반환해요. 레코드가 없거나 해당 필드의 모든 레코드가 NULL 값을 가지면 NULL을 반환해요.
매개변수:
field(필수): 첫 번째 값을 반환할 필드예요.
반환 타입: 입력 필드 타입과 동일
예제
source=accounts
| stats first(firstname) by gender
쿼리는 다음과 같은 결과를 반환해요:
first(firstname) | gender
Nanette | F
Amber | M
LAST
사용법: LAST(field)
자연 문서 순서에 따라 필드의 마지막 non-null 값을 반환해요. 레코드가 없거나 해당 필드의 모든 레코드가 NULL 값을 가지면 NULL을 반환해요.
매개변수:
field(필수): 마지막 값을 반환할 필드예요.
반환 타입: 입력 필드 타입과 동일
예제
source=accounts
| stats last(firstname) by gender
쿼리는 다음과 같은 결과를 반환해요:
last(firstname) | gender
Nanette | F
Dale | M
LIST
사용법: LIST(expr)
지정된 표현식의 모든 값을 배열로 수집해요. 값은 문자열로 변환되고, NULL 값은 필터링되며, 중복은 보존돼요. 이 함수는 순서를 보장하지 않고 최대 100개의 값을 반환해요.
매개변수:
expr(필수): 값을 수집할 필드 표현식이에요.
반환 타입: ARRAY
이 집계 함수는 array, struct, object 필드 타입을 지원하지 않아요.
예제
다음 예제는 문자열 필드의 모든 값을 배열로 수집해요:
source=accounts
| stats list(firstname)
쿼리는 다음과 같은 결과를 반환해요:
list(firstname)
[Amber,Hattie,Nanette,Dale]
VALUES
사용법: VALUES(expr)
지정된 표현식의 모든 고유 값을 정렬된 배열로 수집해요. 값은 문자열로 변환되고, NULL 값은 필터링되며, 중복은 제거돼요.
매개변수:
expr(필수): 고유 값을 수집할 표현식이에요.
반환 타입: ARRAY
plugins.ppl.values.max.limit 설정이 반환되는 고유 값의 최대 개수를 제어해요:
- 기본값은
0으로, 제한 없이 값을 반환해요. - 양의 정수로 설정하면 고유 값의 개수를 제한해요.
자세한 내용은 PPL 설정 문서를 참고해요.
예제
다음 예제는 문자열 필드의 고유 값을 정렬된 배열로 수집해요:
source=accounts
| stats values(firstname)
쿼리는 다음과 같은 결과를 반환해요:
values(firstname)
[Amber,Dale,Hattie,Nanette]