2.X/4. Aggregations

4-02-2. Buckets Inside Buckets

drscg 2017. 9. 24. 11:28

The true power of aggregations becomes apparent once you start playing with different nesting schemes. In the previous examples, we saw how you could nest a metric inside a bucket, which is already quite powerful.

또 다른 중첩 방식을 적용해 보면, aggregation의 진정한 위력은 분명해진다. 이전의 예제에서, bucket 내부에 metric을 중첩하는 방법을 알 수 있었다. 그것으로 이미 매우 강력하다.

But the real exciting analytics come from nesting buckets inside other buckets. This time, we want to find out the distribution of car manufacturers for each color:

하지만, 진짜 흥미로운 분석은 다른 bucket 내부에 bucket을 중첩하는 것에 있다. 지금, 각 색상의 자동차 제조업체 분포를 알아보자.

GET /cars/transactions/_search
{
   "size" : 0,
   "aggs": {
      "colors": {
         "terms": {
            "field": "color"
         },
         "aggs": {
            "avg_price": { 
               "avg": {
                  "field": "price"
               }
            },
            "make": { 
                "terms": {
                    "field": "make" 
                }
            }
         }
      }
   }
}

이전의 avg_price metric을 남겨두었다.

make 라고 이름 붙인 또 다른 aggregation을 colors bucket에 추가하였다.

이 aggregation은 terms bucket이고, 각 자동차 제조업체에 대한 유일한 bucket을 생성할 것이다.

A few interesting things happened here. First, you’ll notice that the previous avg_price metric is left entirely intact. Each level of an aggregation can have many metrics or buckets. The avg_price metric tells us the average price for each car color. This is independent of other buckets and metrics that are also being built.

몇 가지 흥미로운 것이 여기에서 보인다. 첫 번째는, 이전의 avg_price metric이 완전히 그대로 남아 있다. aggregation의 각 단계(level) 는 많은 metric과 bucket을 가질 수 있다. avg_price metric은 각 자동차 색상에 대한 평균 가격을 가져온다. 이것은 만들었던 다른 bucket과 metric에 대해 독립적이다.

This is important for your application, since there are often many related, but entirely distinct, metrics that you need to collect. Aggregations allow you to collect all of them in a single pass over the data.

흔히 수집할 metric이 많이 연관되어 있는 반면에, 완전히 별개이기 때문에, 이것은 응용프로그램에 매우 중요하다. aggregation은 단 한번의 데이터 검토로, 그들 모두를 수집할 수 있다.

The other important thing to note is that the aggregation we added, make, is a terms bucket (nested inside the colors terms bucket). This means we will generate a (colormake) tuple for every unique combination in your dataset.

주목해야 할 다른 중요한 점은, 추가한 aggregation make 가 terms bucket(colors terms bucket 내에 중첩된)이라는 것이다. 즉, 데이터 집합에 있는, 모든 유일한 조합에 대해, (colormake) 쌍을 생성할 것이다.

Let’s take a look at the response (truncated for brevity, since it is now growing quite long):

response를 살펴보자.

{
...
   "aggregations": {
      "colors": {
         "buckets": [
            {
               "key": "red",
               "doc_count": 4,
               "make": { 
                  "buckets": [
                     {
                        "key": "honda", 
                        "doc_count": 3
                     },
                     {
                        "key": "bmw",
                        "doc_count": 1
                     }
                  ]
               },
               "avg_price": {
                  "value": 32500 
               }
            },

...
}

예상한 것처럼, 새로운 aggregation은 각 color bucket 아래에 중첩되어 있다.

색상 별로 자동차 제조사가 나누어져 있는 것을 알 수 있다.

마지막으로, 이전의 avg_price metric이 그대로 있는 것을 볼 수 있다.

The response tells us the following:

이 response에서 다음 사항을 알 수 있다.

  • There are four red cars.

    4 가지 색상의 자동차가 있다.

  • The average price of a red car is $32,500.

    붉은 자동차의 평균가는 $32,500 이다.

  • Three of the red cars are made by Honda, and one is a BMW.

    붉은 차 중 3 대는 Honda, 하나는 BMW이다.


'2.X > 4. Aggregations' 카테고리의 다른 글

4-02. Aggregation Test-Drive  (0) 2017.09.24
4-02-1. Adding a Metric to the Mix  (0) 2017.09.24
4-02-3. One Final Modification  (0) 2017.09.24
4-03. Building Bar Charts  (0) 2017.09.24
4-04. Looking at Time  (0) 2017.09.24