노트

Elasticsearch에서 고유 값 개수 및 필드별 집계 본문

ㄱㅂ/Elasticsearch

Elasticsearch에서 고유 값 개수 및 필드별 집계

늅뎁 2025. 6. 27. 13:51
반응형

 

1. Elasticsearch에서 고유 값 개수 계산하기

Elasticsearch는 대량의 데이터를 효율적으로 검색하고 분석할 수 있는 강력한 도구입니다. 특정 필드의 고유 값 개수를 계산하려면 cardinality 집계를 활용할 수 있습니다. 예를 들어, 특정 이벤트와 시간 범위에 해당하는 데이터에서 특정 필드의 고유 값 개수를 계산하고 싶다면 아래와 같은 쿼리를 사용할 수 있습니다. 이 쿼리는 unique_field라는 필드의 고유 값 개수를 계산하며, size: 0으로 설정했기 때문에 검색된 문서 자체는 반환되지 않고 집계 결과만 반환됩니다.

{
    "query": {
        "bool": {
            "filter": [
                { "term": { "event_type.keyword": "SpecificEvent" } },
                { "range": { "event_time": { "gte": "2023-01-01", "lt": "2023-01-31" } } }
            ]
        }
    },
    "size": 0,
    "aggs": {
        "unique_count": {
            "cardinality": {
                "field": "unique_field"
            }
        }
    }
}

 

 

2. 쿼리 실행 결과

위 쿼리를 실행하면 JSON 형식의 결과가 반환됩니다. 결과는 aggregations 섹션에서 고유 값 개수를 확인할 수 있습니다. 예를 들어, 아래 결과에서 "value": 42unique_field 필드에서 고유 값이 42개임을 나타냅니다. 이 방식은 대량의 데이터에서 중복을 제거하고 특정 필드의 고유 값 분포를 파악하는 데 매우 유용합니다.

{
    "aggregations": {
        "unique_count": {
            "value": 42
        }
    }
}

 

 

3. 특정 필드별 고유 값 계산하기

특정 필드별로 고유 값을 계산하고 싶다면 terms 집계와 cardinality 집계를 함께 사용할 수 있습니다. 아래는 필드별로 고유 값 개수를 계산하는 예시입니다. 이 쿼리는 group_field로 데이터를 그룹화한 뒤, 각 그룹에서 unique_field의 고유 값 개수를 계산합니다. 이를 통해 각 그룹별로 고유 값 분포를 분석할 수 있습니다.

{
    "query": {
        "bool": {
            "filter": [
                { "term": { "event_type.keyword": "SpecificEvent" } },
                { "range": { "event_time": { "gte": "2023-01-01", "lt": "2023-01-31" } } }
            ]
        }
    },
    "size": 0,
    "aggs": {
        "group_by_field": {
            "terms": {
                "field": "group_field.keyword",
                "size": 10
            },
            "aggs": {
                "unique_count_per_group": {
                    "cardinality": {
                        "field": "unique_field"
                    }
                }
            }
        }
    }
}

 

 

4. 필드별 집계 결과

위 쿼리의 결과는 각 group_field 값에 대해 unique_field의 고유 값 개수를 반환합니다. 예를 들어, 아래 결과는 그룹별로 고유 값 개수를 보여줍니다. GroupA는 42개의 고유 값을, GroupB는 58개의 고유 값을 가지고 있음을 알 수 있습니다. 이 방식은 필드별로 데이터를 그룹화하고 각 그룹의 고유 값 분포를 분석하는 데 매우 유용합니다.

{
    "aggregations": {
        "group_by_field": {
            "buckets": [
                {
                    "key": "GroupA",
                    "doc_count": 100,
                    "unique_count_per_group": {
                        "value": 42
                    }
                },
                {
                    "key": "GroupB",
                    "doc_count": 150,
                    "unique_count_per_group": {
                        "value": 58
                    }
                }
            ]
        }
    }
}
반응형

'ㄱㅂ > Elasticsearch' 카테고리의 다른 글

Elasticsearch Bucket(Group by)  (0) 2025.06.28