Elasticsearch: Pipeline Aggregations (파이프라인 집계) 완벽 정리 🚀
1. Pipeline Aggregations 개요
✔ Metrics Aggregation의 결과를 다시 연산하는 기능
✔ 다른 Aggregation 결과를 입력값으로 사용 가능
✔ 데이터의 이동 평균, 미분, 누적 합계, 통계 분석 수행 가능
2. Pipeline Aggregations 주요 기능
설명 | 사용 | 예시 |
min_bucket | 버킷 중 최솟값 찾기 | 월별 최소 승객 수 |
max_bucket | 버킷 중 최댓값 찾기 | 월별 최대 승객 수 |
avg_bucket | 버킷들의 평균값 | 주간 평균 방문자 수 |
sum_bucket | 버킷들의 합계 | 분기별 총 매출 |
stats_bucket | min, max, sum, avg 등 한 번에 계산 | 다양한 통계 분석 |
cumulative_sum | 누적 합계 계산 | 매월 누적 방문자 수 |
moving_avg | 이동 평균 계산 | 3개월 이동 평균 승객 수 |
derivative | 값의 미분 계산 | 방문자 수 증가율 |
Elasticsearch에서 "버킷(Bucket)"이란?
👉 버킷은 데이터를 특정 기준에 따라 그룹화하는 컨테이너입니다.
👉 **"버킷을 만든다"**는 것은 데이터를 특정 조건에 따라 분류하는 것입니다.
👉 각 버킷에는 해당하는 **도큐먼트 개수(doc_count)**가 자동으로 계산됩니다.
3. 데이터 예제 (지하철 승객 수 데이터)
먼저 테스트 데이터를 준비합니다.
📌 예제 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}
✅ 승객 수 데이터가 포함된 샘플 데이터 생성
4. 누적 합계 (Cumulative Sum Aggregation)
✔ 월별 승객 수 합계를 누적 계산
✔ buckets_path 옵션을 이용해 다른 집계 결과를 참조
📌 예제 2: cumulative_sum으로 누적 승객 수 계산
GET my_stations/_search
{
"size": 0,
"aggs": {
"months": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sum_psg": {
"sum": {
"field": "passangers"
}
},
"accum_sum_psg": {
"cumulative_sum": {
"buckets_path": "sum_psg"
}
}
}
}
}
}
✅ 각 월별 합계를 누적하여 계산하는 예제
✅ buckets_path: "sum_psg" → sum_psg 값을 입력으로 사용
5. 이동 평균 (Moving Average Aggregation)
✔ 이전 버킷 값을 참조하여 이동 평균 계산
✔ 데이터의 변동성을 부드럽게 표현 가능
📌 예제 3: moving_avg로 3개월 이동 평균 계산
GET my_stations/_search
{
"size": 0,
"aggs": {
"months": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sum_psg": {
"sum": {
"field": "passangers"
}
},
"moving_avg_psg": {
"moving_avg": {
"buckets_path": "sum_psg",
"window": 3
}
}
}
}
}
}
✅ 3개월 이동 평균을 계산하여 트렌드 파악
✅ window: 3 → 3개월 이동 평균
6. 미분 (Derivative Aggregation)
✔ 변화율(증가율/감소율) 계산 가능
✔ 트래픽 증가율, 매출 성장률 분석에 활용
📌 예제 4: derivative로 승객 수 증가율 계산
GET my_stations/_search
{
"size": 0,
"aggs": {
"months": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sum_psg": {
"sum": {
"field": "passangers"
}
},
"growth_rate_psg": {
"derivative": {
"buckets_path": "sum_psg"
}
}
}
}
}
}
✅ 승객 수의 증가율(미분 값) 계산
7. 최대값이 있는 버킷 찾기 (Max Bucket Aggregation)
✔ 여러 버킷 중 최대값이 포함된 버킷을 찾음
✔ 가장 많은 승객이 있는 월 확인 가능
📌 예제 5: max_bucket으로 최대 승객 수를 기록한 월 찾기
GET my_stations/_search
{
"size": 0,
"aggs": {
"months": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sum_psg": {
"sum": {
"field": "passangers"
}
}
}
},
"max_passangers_month": {
"max_bucket": {
"buckets_path": "months>sum_psg"
}
}
}
}
✅ 가장 승객 수가 많았던 달을 찾는 예제
✅ buckets_path: "months>sum_psg" → 부모 > 자식 관계로 접근
8. 정리
기능 | 설명 | 활용 예시 |
누적 합계 (cumulative_sum) | 이전 값들의 합을 누적 | 총 방문자 수 분석 |
이동 평균 (moving_avg) | 일정 구간의 평균 계산 | 3개월 이동 평균 |
미분 (derivative) | 값의 증가율 계산 | 매출 성장률 분석 |
최대 버킷 (max_bucket) | 최대값을 포함한 버킷 찾기 | 최대 방문자 수가 있는 날짜 찾기 |
9. 마무리
✔ Pipeline Aggregations을 활용하면 복잡한 데이터 분석 가능
✔ 버킷을 기준으로 누적 합, 이동 평균, 증가율 등을 손쉽게 계산 가능
✔ 하지만 너무 깊은 Aggregations을 사용하면 성능 저하 가능
이제 Aggregations을 활용하여 더욱 강력한 데이터 분석을 진행할 수 있습니다! 🚀
'Elastic Search > 집계' 카테고리의 다른 글
[Elasticsearch] Sub-Aggregations (하위 집계) 완벽 정리 (0) | 2025.02.03 |
---|---|
[Elasticsearch] Bucket Aggregations (버킷 집계) 완벽 정리 (0) | 2025.02.03 |
[Elasticsearch] Metrics Aggregations (메트릭 집계) 완벽 정리 (0) | 2025.02.03 |
[Elasticsearch] 집계(Aggregations) 완벽 정리 (0) | 2025.02.03 |