합계 집계
합계 집계 (Sum aggregation)
sum 집계는 일치하는 모든 문서에 걸쳐 필드에서 추출된 숫자 값들의 총합을 계산하는 단일 값(single-value) 메트릭 집계예요. 이 집계는 수익, 수량, 기간 같은 지표의 합계를 계산하는 데 흔히 사용돼요.
출처: 문서
본문
파라미터
sum 집계는 다음과 같은 파라미터를 받아요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
field |
String | 집계할 필드예요. 숫자 필드여야 해요. |
script |
Object | 집계할 사용자 지정 값을 계산하는 데 사용하는 스크립트예요. field 대신 또는 field와 함께 사용할 수 있어요. |
missing |
Number | 대상 필드가 없는 문서에 사용할 기본값이에요. |
예제
다음 예제는 물류 인덱스에 기록된 배송물의 총 무게를 계산하는 방법을 보여줘요.
인덱스를 생성해요:
PUT /deliveries
{
"mappings": {
"properties": {
"shipment_id": { "type": "keyword" },
"weight_kg": { "type": "double" }
}
}
}
샘플 문서를 추가해요:
POST /deliveries/_bulk?refresh=true
{"index": {}}
{"shipment_id": "S001", "weight_kg": 12.5}
{"index": {}}
{"shipment_id": "S002", "weight_kg": 7.8}
{"index": {}}
{"shipment_id": "S003", "weight_kg": 15.0}
{"index": {}}
{"shipment_id": "S004", "weight_kg": 10.3}
다음 요청은 deliveries 인덱스의 모든 문서에 걸친 총 무게를 계산하고, size를 0으로 설정해 문서 히트를 생략하며, weight_kg의 총합을 반환해요:
GET /deliveries/_search
{
"size": 0,
"aggs": {
"total_weight": {
"sum": {
"field": "weight_kg"
}
}
}
}
응답에는 12.5 + 7.8 + 15.0 + 10.3의 합에 해당하는 값 45.6이 포함돼요:
{
...
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"total_weight": {
"value": 45.6
}
}
}
스크립트를 사용해 값 계산하기 (Using a script to compute values)
필드를 직접 지정하는 대신 집계 값을 계산할 스크립트를 제공할 수 있어요. 값이 파생되거나 조정되어야 할 때 유용해요.
다음 예제에서는 스크립트를 사용해 합산하기 전에 각 무게를 킬로그램에서 그램으로 변환해요:
GET /deliveries/_search
{
"size": 0,
"aggs": {
"total_weight_grams": {
"sum": {
"script": {
"source": "doc['weight_kg'].value * 1000"
}
}
}
}
}
응답에는 45600이라는 total_weight_grams 값이 포함돼요:
{
...
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"total_weight_grams": {
"value": 45600
}
}
}
필드를 값 스크립트와 결합하기 (Combining a field with a value script)
필드와 스크립트를 함께 지정하고, 특별한 변수 _value를 사용해 필드의 값을 참조할 수도 있어요. 기존 필드 값에 변환을 적용할 때 유용해요.
다음 예제는 합산하기 전에 모든 무게를 10% 증가시켜요:
GET /deliveries/_search
{
"size": 0,
"aggs": {
"adjusted_weight": {
"sum": {
"field": "weight_kg",
"script": {
"source": "Math.round(_value * 110) / 100.0"
}
}
}
}
}
응답은 원래 총 무게에 10% 증가가 적용된 값을 반영해요:
{
...
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"adjusted_weight": {
"value": 50.16
}
}
}
누락 값 처리 (Missing values)
대상 필드가 없는 문서는 기본적으로 무시돼요. 기본값을 사용해 해당 문서를 포함하려면 missing 파라미터를 사용해요.
다음 예제는 누락된 weight_kg 필드에 기본값 0을 할당해요. 이렇게 하면 이 필드가 없는 문서도 weight_kg가 0으로 설정된 것으로 간주되어 집계에 포함돼요.
GET /deliveries/_search
{
"size": 0,
"aggs": {
"total_weight_with_missing": {
"sum": {
"field": "weight_kg",
"missing": 0
}
}
}
}