Page tree
Skip to end of metadata
Go to start of metadata

1 집계 기초

  • 검색과 달리 더 넓은 범위를 다룬다. 검색은 몇 가지 레코드를 확장할 필요를 다루고, 분석은 다른 방식으로 데이터를 축소하고 분할할 때 사용함
  • aggregations 또는 aggs 요소는 데이터를 집계 하는데 사용하며, 모든 집계 요청은 다음 형식과 같음
    Bucket, Metric 집계에 aggs, aggregations 어느것을 사용하나 결과는 같다. 차이가 뭘까?


POST /인덱스명/타입/_search
{
  "aggs" : { ... 집계 타입 ... },
  "query" : { ... 쿼리 타입(선택사항) ...},
  "size" : 0
}

  • aggs 요소는 실제 집계 쿼리를 포함
  • query 가 없으면 집계는 주어진 인텍스와 타입에 있는 모든 도큐먼트를 고려, match_all 과 같음
  • size 요소에는 결과에 반환해야 하는 검색 성공률을 지정, size 의 기본값은 10으로 명시하지 않는다면 응답은 query 하위 컨텍스트에서 10개가 적중. 일반적으로 집계 결과를 얻는 데 관심이 있는 경우, 집계 결과와 함께 결과가 표시되지 않도록 size를 0으로 설정해야 함
  • 대략 Bucket 집계, Metric 집계, Matrix 집계, Pipeline 집계 네가지 타입으로 구분할 수 있다.

1) Bucket 집계

  • 컨텍스트에 있는 각 도큐먼트가 어떤 버킷에 속해 있는지 결정해 평가
  • Bucket 집계의 각 타입은 여러 Segment 혹은 Bucket 으로 데이터를 분할하며, 모든 분석 과정에서 사용하는 가장 일반적인 타입의 집계
  • 집계 쿼리에서 최상단 혹은 가장 바깥 레벨에 위치할 수 있음
  • 다른 Bucket 내부에 중첩되게 사용할 수 있음

가. 문자열 데이터 Bucketing

  • Terms 집계가 가장 일반적인 방법
  • 특정 필으에서 고유한 값으로 데이터를 분할 하거나 그룹화 하는데 유용
    예) 검색이 가장 많은 카테고리 select category, count(*) from xxx group by category
  • 아래 예제에서 size 를 terms 유형 안에서 선언하면, 맨 아래 결과 목록이 2를 의미하며, 0을 선언하면 오류가 난다.
    최상위 레벨에 지정한 size 매개 변수는 검색 결과를 방지하기 위해 사용하는 반면, Terms 집계 안에 지정한 size 필드는 반환될 Terms 버킷의 최대 개수를 나타냄

GET /slipp-study1/accessLog/_search
{
  "aggs": {
    "categoryRank": {
      "terms": {
        "field": "customer",
        "size": 2
      }
    }
  }
}


나. 숫자 데이터 Bucketing

    • 숫자 필드도 다양한 버킷 데이트로 분할 할 수 있음
    • 대표적인게 Histogram 집계, Range 집계
    • Histogram 이 지정한 간격이라면 Range는 크기가 다른 버킷을 만들 수 있음
Histogram - 0 ~ 300 미만, 300 ~ 600 미만, 600 ~ 900 까지 300간격으로 검색
GET /slipp-study1/accessLog/_search
{
  "aggs": {
    "upload_usage": {
      "histogram": {
        "field": "uploadTotal",
        "interval": 300
      }
    }
  },
  "size": 0
}
range - 사용자가 직접 결과 값의 키를 지정할 수도 있음, 맨 마지막 결과 값은 test라는 key를 명시적으로 주었음
GET /slipp-study1/accessLog/_search
{
  "aggs": {
    "by_usage": {
      "range": {
        "field": "uploadTotal",
        "ranges": [
          {
            "to": 300
          },
          {
            "from": 300,
            "to": 800
          },
          {
            "key": "test",
            "from": 800
          }
        ]
      }
    }
  },
  "size": 0
}


다. 필터 데이터 집계

  • 집계를 적용하기 전에 필터링
GET /slipp-study1/accessLog/_search
{
  "query": {
    "term": {
      "customer": {
        "value": "Microsoft"
      }
    }
  },
  "aggs": {
    "bycategory": {
      "terms": {
        "field": "usage"
      }
    }
  }
}

라. 중첩 집계

마. 맞춤형 조건 Bucketing

바. 날짜 또는 시간 데이터 Bucketing

    • Date Histogram 집계
y, q(quarters), M, w, d, h, m, s, ms
GET /slipp-study1/accessLog/_search
{
  "aggs": {
    "counts_over_time": {
      "date_histogram": {
        "field": "time",
        "interval": "20s",
        "time_zone": "+09:00"
      }
    }
  }
}

사. 지리 공간 데이터 Bucketing


2) Metric 집계

  • 필드에서 숫자 타입으로 동작하며, 주어진 컨텍스트에서 숫자 필드의 집계값을 계산 하는데 사용 

가. sum

  • downloadSum 은 이 연산에 대한 가상의 이름, alias 라고 보면 되려나? sum 은 연산 명 field 부분에 있는 것은 sum을 할 필드이름이다. size 를 0 으로 해야 결과만 나옴
     
GET /slipp-study1/accessLog/_search
{
  "aggregations" : {
    "downloadSum" : {
      "sum": {
        "field": "downloadTotal"
      }
    }
  },
  "size": 0
}

나. Average

  • avg 를 사용
     
GET /slipp-study1/accessLog/_search
{
  "aggregations" : {
    "downloadAverage" : {
      "avg": {
        "field": "downloadTotal"
      }
    }
  },
  "size": 0
}

다. Min, Max

  • 위의 예제에서 타입 부분만 min, max 로 변경하면 됨, 예제는 생략

라. Stats

  • 단일 요청에서 도큐먼트의 합계, 평균, 최소, 최대, 개수를 계산함. 클라이언트 요청 횟수를 줄일 수 있음
GET /slipp-study1/accessLog/_search
{
  "aggregations" : {
    "download_status" : {
      "stats": {
        "field": "downloadTotal"
      }
    }
  },
  "size": 0
}

마. Extended Stats

  • 추가 통계 정보를 더해 반환함 
  • squares : 제곱, variance : 분산, standard deviation : 표준편차, 표준편차 구간 제공
GET /slipp-study1/accessLog/_search
{
  "aggregations" : {
    "download_status" : {
      "extended_stats": {
        "field": "downloadTotal"
      }
    }
  },
  "size": 0
}

바. Cardinality

  • 특정 요소의 개수를 찾는데 유용.
  • text type 실행시, kibana가 오류를 표시해 준다. 고쳐서 할 수도 있지만 리소스가.. .어쩌구 저쩌구.... keyword 타입은 잘 된다.
GET /slipp-study1/accessLog/_search
{
  "aggregations" : {
    "unique_vistors" : {
      "cardinality": {
        "field": "customer"
      }
    }
  },
  "size": 0
}


select count(*) from (select distinct 컬럼 from table) A 와 같은 결과를 나타 낸다고 함


3) Matrix 집계

  • 5.0 에서 도입된 새로운 기능, 이 책에서 안 다룬다고 함.... ㅋ.ㅋ 
  • text 타입 하면 kibana 오류 토해냄


GET /slipp-study1/accessLog/_search
{
  "aggs": {
    "matrixstats": {
      "matrix_stats": {
        "fields": [
          "uploadTotal",
          "usage"
        ]
      }
    }
  }
}


--- 결과 분석
count : 계산에 포함된 필드당 샘플 개수
mean : 개별 필드의 평균 값
variance : 필드당 샘플이 평균으로부터 얼마나 분산돼 있는지를 측정한 값
skewness : 필드당 평균값 주위에 비대칭 분포를 정량화 하는 측정값
kurtosis : 필드당 분산의 형태를 정량화 하는 측정값
covariance : 한 필드의 변화가 다른 필드에 어떻게 연관 되는지 정량적으로 서술하는 행렬
correlation : 공분산 행렬 covariance matrix 을 -1에서 1 범위로 스케일한 값
              이는 필드 분포 간의 관계를 설명. correlation 값이 더 높다면 더 많은 수치형 필드가 상관돼 있다는 의미

4) Pipeline 집계

  • 다른 타입의 집계 결과를 다시 집계할 수 있는 상위 레벨의 집계 
  • Parent Pipeline 집계 : 다른 집계 안에 Pipeline 집계를 중첩해 사용
  • Sibling Pipeline 집계 : Pipeline 이 완료된 원본 집계의 형제로 사용

--------------- 하기 싫다. 양이 너무 많음 ------------------








  • No labels