728x90
파이프라인 집계는 다른 집계로 생성된 버킷을 참조해서 집계를 수행한다(집계, 중첩된 집계를 통해 생성된 버킷을 사용해 추가적인 계산을 한다.) 파이프라인 집계는 부모/형제 두 가지 유형이 있다.
파이프라인 집계를 수행할 때는 buckets_path 파라미터를 사용해 참조할 집계의 경로를 지정함으로써 체인 형식으로 집계간의 연산이 이뤄진다. 파이프라인 집계는 모든 집계가 완료된 후에 생성된 버킷을 사용하기 때문에 하위 집계를 가질 수는 없지만 다른 파이프라인 집계와는 buckets_path를 통해 참조하도록 지정할 수 있다.(다른 집계를 통해 생성된 버킷을 사용해 또 다른 집계를 수행한다.)
집계를 참조하는 방법
- AGG_SEPARATOR: >
- METRIC_SEPARATOR: .
- AGG_NAME: 집계 이름
- METRIC: 메트릭 집계 이름(다중 메트릭 집계인 경우)
- PATH: AGG_NAME [ AGG_SEPARATOR, AGG_NAME ] * [ METRIC_SEPARATOR, METRIC ]
형제 집계
Request
GET /apache-web-log/_search?size=0
{
"aggs": {
"histo": {
"date_histogram": {
"field": "timestamp",
"interval": "minute"
},
"aggs": {
"bytes_sum": {
"sum": {
"field": "bytes"
}
}
}
},
"max_bytes": {
"max_bucket": {
"buckets_path": "histo>bytes_sum"
}
}
}
}
Response
"aggregations": {
"histo": {
"buckets": [
{
"key_as_string": "2015-05-17T10:05:00.000Z",
"key": 1431857100000,
"doc_count": 74,
"bytes_sum": {
"value": 5185322
}
},
{
"key_as_string": "2015-05-17T10:06:00.000Z",
"key": 1431857160000,
"doc_count": 0,
"bytes_sum": {
"value": 0
}
},
{
"key_as_string": "2015-05-17T10:07:00.000Z",
"key": 1431857220000,
"doc_count": 0,
"bytes_sum": {
"value": 0
}
}
// ... 생략 ...
]
},
"max_bytes": {
"value": 4379454,
"keys": [
"2015-01-04T05:13:00.000Z"
]
}
}
- 동일 선상의 위치에서 수행되는 새 집계를 의미한다.
- 형제 집계를 통해 수집되는 집계는 기존 버킷이 아닌 동일 선상의 위치에 새 집계가 생성되는 파이프라인 집계이다.
- 형제 집계에 포함되는 집계
- 평균 버킷 집계
- 최대 버킷 집계
- 최소 버킷 집계
- 합계 버킷 집계
- 통계 버킷 집계
- 확장 통계 버킷 집계
- 백분위수 버킷 집계
- 이동 평균 집계
- Request 모델 분석
- max_bytes: 파이프라인 집계의 이름
- max_bucket: 합산된 데이터양 가운데 가장 큰 값을 구하기 위해 max_bucket을 이용
- buckets_path: 참조할 버킷으로 histo버킷의 bytes_sum 버킷 참조
//최대 버킷 집계
"max_bucket": {
"buckets_path": "histo>bytes_sum"
}
//최소 버킷 집계
"min_bucket": {
"buckets_path": "histo>bytes_sum"
}
//평균 버킷 집계
"avg_bucket": {
"buckets_path": "histo>bytes_sum"
}
//통계 버킷 집계
"stats_bucket": {
"buckets_path": "histo>bytes_sum"
}
//확장 통계 버킷 집계
"extended_stats_bucket": {
"buckets_path": "histo>bytes_sum"
}
//백분위수 버킷 집계
"percentiles_bucket": {
"buckets_path": "histo>bytes_sum"
}
//이동 평균 버킷 집계
"moving_avg_bucket": {
"buckets_path": "histo>bytes_sum"
}
부모 집계
Request
GET /apache-web-log/_search?size=0
{
"aggs": {
"histo": {
"date_histogram": {
"field": "timestamp",
"interval": "day"
},
"aggs": {
"bytes_sum": {
"sum": {
"field": "bytes"
}
},
"sum_deriv": {
"derivative": {
"buckets_path": "bytes_sum",
"gap_policy": "insert_zeros"
}
}
}
}
}
}
Response
"aggregations": {
"histo": {
"buckets": [
{
"key_as_string": "2015-05-17T00:00:00.000Z",
"key": 1431820800000,
"doc_count": 1632,
"bytes_sum": {
"value": 414259902
}
},
{
"key_as_string": "2015-05-18T00:00:00.000Z",
"key": 1431907200000,
"doc_count": 2893,
"bytes_sum": {
"value": 788636158
},
"sum_deriv": {
"value": 374376256
}
},
{
"key_as_string": "2015-05-19T00:00:00.000Z",
"key": 1431993600000,
"doc_count": 2896,
"bytes_sum": {
"value": 665827339
},
"sum_deriv": {
"value": -122808819
}
},
{
"key_as_string": "2015-05-20T00:00:00.000Z",
"key": 1432080000000,
"doc_count": 2578,
"bytes_sum": {
"value": 878559106
},
"sum_deriv": {
"value": 212731767
}
}
]
}
}
- 집계를 통해 생성된 버킷을 사용해 계산을 수행하고 그 결과를 기존 집계에 반영한다.
- 부모 집계에 포함되는 집계
- 파생 집계: 부모 히스토리그램 또는 날짜 히스토그램 집계에서 지정된 메트릭의 파생 값을 계산하는 상위 파이프라인 집계
- 부모 히스토리그램 집계의 측정 항목에 대해 작동하며, 히스토리 집계에 의한 각 버킷의 집계 값을 비교해서 차이를 계산
- 지정된 메트릭은 숫자여야 하며, 상위에 해당하는 집계의 min_doc_count가 0보다 큰 값으로 설정될 경우 일부 간경이 결과에서 생략될 수 있기 때문에 min_doc_count 값을 0으로 설정해야 한다.
- 누적 집계
- 버킷 스크립트 집계
- 버킷 셀렉터 집계
- 시계열 차분 집계
- 파생 집계: 부모 히스토리그램 또는 날짜 히스토그램 집계에서 지정된 메트릭의 파생 값을 계산하는 상위 파이프라인 집계
- 파생 집계를 실제 데이터를 다루다 보면, 비어 있거나, 데이터가 없는 값(갭)이 생길 수 있으며 발생 이유는 아래와 같다.
- 어느 하나의 버킷 안으로 포함되는 문서들에 요청된 필드가 포함되지 않은 경우
- 하나 이상의 버킷에 대한 쿼리와 일치하는 문서가 존재하지 않는 경우
- 다른 종속된 버킷에 값이 누락되어 계산된 메트릭이 값을 생성할 수 없는 경우
- 파이프라인 집계에 원하는 동작을 알리는 갭 정책이 필요하며, 모든 파이프라인 집계에서는 gap_policy 파라미터를 허용한다.
- skip: 누락된 데이터를 버킷이 존재하지 않는 것으로 간주한다.(버킷을 건너뛰고 다음으로 사용 가능한 값을 사용해 계산)
- insert_zerors: 누락된 값을 0으로 대체하며 파이프라인 집계 계산은 정상적으로 진행
- Request 요청 분석
- histo: 부모 히스토그램(일 단위 집계)
- bytes_sum: 일 단위로 데이터 크기를 합산(sum 집계)
- sum_deriv: 일 단위로 데이터 크기의 합산된 값을 버킷의 현재 값과 이전 값을 비교하는 집계를 수행
- Response 응답 분석
- sum_deriv: 버킷의 이전 집계 값과 현재 집계 값을 비교해서 그 차이를 반환한다.
//파생 집계
"derivative": {
"buckets_path": "bytes_sum"
}
//누적 집계
"cumulative_sum": {
"buckets_path": "bytes_sum"
}
//버킷 스크립트 집계
"bucket_script": {
"buckets_path": {
"my_var1": "bytes_sum",
"my_var2": "total_count"
},
"script": "params.my_var1 / params.my_var2"
}
//버킷 셀렉터 집계
"bucket_selector": {
"buckets_path": {
"my_var1": "bytes_sum",
"my_var2": "total_count"
},
"script": "params.my_var1 > params.my_var2"
}
//시계열 차분 집계
"serial_diff": {
"buckets_path": "bytes_sum",
"lag": 7
}
728x90
'Elastic Search' 카테고리의 다른 글
| Ch06. 고급 검색 - 한글 형태소 분석기 사용하기 (0) | 2025.09.24 |
|---|---|
| Ch05. 데이터 집계 - 근사값으로 제공되는 집계 연산 (0) | 2025.09.18 |
| Ch05. 데이터 집계 - 버킷 집계 (0) | 2025.09.18 |
| Ch05. 데이터 집계 - 메트릭 집계 (0) | 2025.09.18 |
| Ch05. 데이터 집계 - 집계 (0) | 2025.09.18 |