본문 바로가기
IT/Elasticsearch

Elasticsearch - Aggregation - extended_stats

by 최고영회 2020. 9. 15.
728x90
반응형
SMALL

aggregation 으로 집계 시 집계로 가져올 수 있는 정보들 (sum, avg, max, min... 등) 을 한번에 가져오는 기능으로 stats 와 extended_stats 가 있다.

stats 를 이용하면 min, max, avg, sum 을 한번에 가져올 수 있고

extended_stats 를 이용하면 stats 에서 가져올 수 있는 정보와 제곱, 분산, 표준편차, 표준편차 구간도 함께 확인 가능하다.

사용 예제는 아래 링크에서 확인 가능하다.

kimyhcj.tistory.com/407

그런데 집계 정보를 가지고 올 때 우리는 bucket 을 이용해서 그룹핑 한 정보들을 가지고 온다.

그렇다면 bucket 으로 그룹핑한 데이터에 대한 stats 정보를 가지고올 수 있을까?

extended_stats_bucket 을 이용하면 가능하다.

{
    "query": {
        "bool": {
            "filter": [
                {
                    "terms": {
                        "id": ["userid_52"]
                    }
                }, 
                {
                    "range": {
                        "date": {
                            "gte": "2020-09-10",
                            "lte": "2020-09-13"
                        }
                    }
                }
            ]
        }
    },
    "sort":[
        {
            "date": "desc"
        }, 
        {
            "rtnCount": "desc"
        }
    ],
    "aggs":{
        "estats":{
            "extended_stats_bucket":{
                "buckets_path": "by_date>rtn_sum"
            }
        },
         "by_date": {
            "date_histogram": {
                "field": "date",
                "calendar_interval": "day",
                "order": {
                    "_key":"asc"
                }
            },
            "aggs": {
                "rtn_sum":{
                    "sum":{
                        "field": "rtnCount"
                    }
                }
            }
        }
    },
    "size": 0,
    "_source":["id", "name", "dept", "date", "rtnCount"]
}

사용자 userid_52 에 대한 9월 일별 사용량을 가지고 오는 query 에

각 일별 데이터에 대한 평균값과 표준편차등을 알기 위해서 extended_stats_bucket 을 이용했다.

특정 사용자의 일별 평균 사용량을 추이 그래프로 표현함과 동시에

표준편차를 계산하여 표준 편차 이상 또는 표준 편차 + N% 이상 사용량이 늘어날 경우를 캐치하여

평소와 다른 패턴으로 사용량이 늘어났음을 확인할 수 있다.

728x90
반응형
LIST