Elasticsearch: Metrics Aggregations (메트릭 집계) 완벽 정리
Elasticsearch의 Metrics Aggregations을 활용하면 **숫자 필드의 연산(최소, 최대, 평균, 합계, 개수 등)**을 수행할 수 있습니다.
✔ 검색된 데이터에서 통계 정보를 추출
✔ 로그 분석, 사용자 접속 통계, 매출 분석 등에 활용 가능
✔ 백분위(Percentiles) 및 유니크 값(Cardinality) 분석 가능
이번 글에서는 Metrics Aggregations 개념, 주요 기능, 실전 예제까지 상세히 알아보겠습니다.
1. Metrics Aggregations 개요
개념 | 숫자 필드를 대상으로 다양한 통계 연산을 수행 | |
사용 목적 | 평균, 합계, 최소값, 최대값, 개수 등 통계 값 계산 | |
주요 유형 | min, max, sum, avg, stats, cardinality, percentiles, percentile_ranks |
2. 데이터 예제 (지하철 승객 수 데이터)
Metrics Aggregations을 테스트할 데이터를 준비합니다.
📌 예제 1: my_stations 인덱스 생성 및 데이터 입력
PUT my_stations/_bulk
{"index": {"_id": "1"}}
{"date": "2019-06-01", "line": "1호선", "station": "종각", "passangers": 2314}
{"index": {"_id": "2"}}
{"date": "2019-06-01", "line": "2호선", "station": "강남", "passangers": 5412}
{"index": {"_id": "3"}}
{"date": "2019-07-10", "line": "2호선", "station": "강남", "passangers": 6221}
{"index": {"_id": "4"}}
{"date": "2019-07-15", "line": "2호선", "station": "강남", "passangers": 6478}
{"index": {"_id": "5"}}
{"date": "2019-08-07", "line": "2호선", "station": "강남", "passangers": 5821}
{"index": {"_id": "6"}}
{"date": "2019-08-18", "line": "2호선", "station": "강남", "passangers": 5724}
{"index": {"_id": "7"}}
{"date": "2019-09-02", "line": "2호선", "station": "신촌", "passangers": 3912}
{"index": {"_id": "8"}}
{"date": "2019-09-11", "line": "3호선", "station": "양재", "passangers": 4121}
{"index": {"_id": "9"}}
{"date": "2019-09-20", "line": "3호선", "station": "홍제", "passangers": 1021}
{"index": {"_id": "10"}}
{"date": "2019-10-01", "line": "3호선", "station": "불광", "passangers": 971}
✅ 지하철 승객 수 데이터를 포함한 샘플 데이터 생성
3. 기본 Metrics Aggregations
🔹 1) 최소, 최대, 합계, 평균값 계산
✔ **min, max, sum, avg**를 사용하여 숫자 필드의 통계를 계산 가능
📌 예제 2: 전체 승객 수의 평균, 합계, 최대, 최소값 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"min_passengers": {
"min": { "field": "passangers" }
},
"max_passengers": {
"max": { "field": "passangers" }
},
"sum_passengers": {
"sum": { "field": "passangers" }
},
"avg_passengers": {
"avg": { "field": "passangers" }
}
}
}
✅ 최소값, 최대값, 합계, 평균을 한 번에 계산 가능
📌 예제 3: 특정 역(강남)의 승객 합계 구하기
GET my_stations/_search
{
"query": {
"match": { "station": "강남" }
},
"size": 0,
"aggs": {
"gangnam_passengers": {
"sum": { "field": "passangers" }
}
}
}
✅ 강남역의 전체 승객 수 합계를 구하는 예제
4. stats Aggregation
✔ stats를 사용하면 min, max, sum, avg, count를 한 번에 계산 가능
📌 예제 4: 승객 수의 min, max, sum, avg, count 값 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"passenger_stats": {
"stats": { "field": "passangers" }
}
}
}
✅ 한 번의 Aggregation으로 여러 값을 동시에 계산 가능
5. Cardinality Aggregation (고유 값 개수)
✔ 특정 필드에 대해 "고유한 값 개수"를 계산
✔ 예: line(지하철 노선)이 몇 개 있는지 확인
📌 예제 5: line 필드에서 고유한 노선 개수 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"uniq_lines": {
"cardinality": { "field": "line.keyword" }
}
}
}
✅ 1호선, 2호선, 3호선 총 3개의 고유 값이 존재
6. Percentiles Aggregation (백분위 수 계산)
✔ 데이터의 특정 백분위 값을 확인 가능 (예: 승객 수의 90% 이상이 몇 명인지 분석)
📌 예제 6: 승객 수의 기본 백분위 계산
GET my_stations/_search
{
"size": 0,
"aggs": {
"pass_percentiles": {
"percentiles": { "field": "passangers" }
}
}
}
✅ 기본적으로 1%, 5%, 25%, 50%, 75%, 95%, 99% 백분위 값을 제공
📌 예제 7: 특정 백분위 값(20%, 60%, 80%)을 설정
GET my_stations/_search
{
"size": 0,
"aggs": {
"pass_percentiles": {
"percentiles": {
"field": "passangers",
"percents": [ 20, 60, 80 ]
}
}
}
}
✅ 20%, 60%, 80% 백분위 값을 지정하여 확인 가능
7. Percentile Ranks Aggregation
✔ 특정 값이 전체 데이터에서 몇 %에 해당하는지 확인
✔ 예: 승객 수 1000명, 3000명, 6000명은 상위 몇 %인지 분석
📌 예제 8: 특정 값의 백분위 랭크 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"pass_percentile_ranks": {
"percentile_ranks": {
"field": "passangers",
"values": [ 1000, 3000, 6000 ]
}
}
}
}
✅ 각 값이 전체 데이터의 몇 % 수준인지 확인 가능 (예: 1000명은 하위 10% 수준)
8. 정리
기본 연산 | min, max, sum, avg, stats | |
고유 값 개수 | cardinality | |
백분위 수 분석 | percentiles, percentile_ranks |
9. 마무리
✔ Metrics Aggregations을 활용하면 데이터 분석이 가능
✔ 백분위 수, 고유 값 개수 등을 통해 인사이트 도출 가능
✔ Elasticsearch를 통계 분석 플랫폼으로 활용 가능
다음 학습에서는 고급 Aggregations 및 성능 최적화 전략을 다루겠습니다! 🚀
'Elastic Search > 집계' 카테고리의 다른 글
[Elasticsearch] Pipeline Aggregations (파이프라인 집계) 완벽 정리 (0) | 2025.02.03 |
---|---|
[Elasticsearch] Sub-Aggregations (하위 집계) 완벽 정리 (0) | 2025.02.03 |
[Elasticsearch] Bucket Aggregations (버킷 집계) 완벽 정리 (0) | 2025.02.03 |
[Elasticsearch] 집계(Aggregations) 완벽 정리 (0) | 2025.02.03 |