Aggregation
Elasticsearch의 여러가지 연산이 가능한 기능으로 데이터를 그룹화하고 간단한 통계값을 얻을수 있는 기능이다.
_search API 에서 지정자 aggregations 또는 aggs를 명시하고 그 아래 임의의 이름을 입력한 뒤 사용할 aggregation 종류와 옵션들을 명시.
크게 두가지로 나뉘며 숫자 또는 날짜 연속형 변수의 계산은 Metrics,
범위나 keyword 값 등을 가지고 도큐먼트들을 그룹화 Bucket
구문이나 옵션에 metrics 이거나 bucket 이라고 따로 명시를 하지는 않는다.
- Metrics Aggregations
특정 query문에 대한 min,max,sum,avg
cardinality: 필드의 값이 모두 몇 종류인지 분포값
percentiles: Q1,Q2,Q3값 이외에 지정한 백분위구간에 위치한 값 출력
percentile_ranks aggregation: 값을 입력해서 그 값이 위치 해 있는 백분위를 볼 수 있음
사용 예)
test 인덱스의 name 필드 합 (sum) 을 가져오는 aggregations
GET test/_search
{
"size": 0,
"aggs": {
"all_name": {
"sum": {
"field": "name"
}
}
}
}
- Bucket Aggregations
주어진 조건으로 분류된 버킷 들을 만들고, 각 버킷에 소속되는 도큐먼트들을 모아 그룹으로 구분
range : 숫자 필드 값으로 범위를 지정하고 각 범위에 해당하는 버킷을 만드는 aggregation
histogram : from, to 대신 interval 옵션을 이용해서 주어진 간격 크기대로 버킷을 구분
terms: keyword 필드의 문자열 별(범주형변수 별로)로 버킷을 나누어 집계
Bucket Aggregation 으로 만든 버킷들 내부에 다시 "aggs" : { } 를 선언해서 또다른 버킷을 만들거나 Metrics Aggregation 을 만들어 사용이 가능
예) terms 버킷별로 metrics 특정필드의 평균을 구하기.
사용 예)
range aggregations 를 이용해서 age 필드의 값을 버킷으로 구분
GET test/_search
{
"size": 0,
"aggs": {
"age_range": {
"range": {
"field": "age",
"ranges": [
{
"to": 10
},
{
"from": 10,
"to": 40
},
{
"from": 40
}
]
}
}
}
}
참고
https://esbook.kimjmin.net/08-aggregations
'DevOps > EFK stack' 카테고리의 다른 글
Kubernetes + EFK stack 배포하기 (0) | 2021.04.29 |
---|---|
MSA (0) | 2021.04.06 |
Fluentd & Kibana (0) | 2021.04.03 |
Elasticesearch 란? (DSL query) (0) | 2021.04.03 |
댓글