Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Агрегирование ›Агрегирование на основе конвейера

Агрегирование по квантилям (корзина)

Вспомогательное агрегирование, которое вычисляет квантили по всем корзинам указанного метрического агрегирования в смежном агрегировании. Указанная метрика должна быть числовой, а смежное агрегирование должно быть агрегированием с несколькими корзинами.

Синтаксис

Агрегирование percentiles_bucket выглядит так:

{
  "percentiles_bucket": {
    "buckets_path": "the_sum"
  }
}

Таблица 78. percentiles_bucket Параметры

Имя параметра Описание Обязательно Значение по умолчанию

buckets_path

Путь к корзинам, для которых необходимо найти квантили (см. buckets_path Синтаксис для получения дополнительных сведений)

Обязательно

gap_policy

Политика, применяемая при обнаружении пробелов в данных (см. Обработка пробелов в данных для получения дополнительных сведений)

Необязательно

skip

format

Шаблон DecimalFormat для выходного значения. При указании формат значения возвращается в свойстве value_as_string агрегирования.

Необязательно

null

percents

Список квантилей для вычисления

Необязательно

[ 1, 5, 25, 50, 75, 95, 99 ]

keyed

Флаг, который возвращает диапазон в виде хеша вместо массива пар ключ-значение

Необязательно

true

Следующий фрагмент вычисляет квантили для корзин совокупного ежемесячного sales:

resp = client.search(
    index="sales",
    size=0,
    aggs={
        "sales_per_month": {
            "date_histogram": {
                "field": "date",
                "calendar_interval": "month"
            },
            "aggs": {
                "sales": {
                    "sum": {
                        "field": "price"
                    }
                }
            }
        },
        "percentiles_monthly_sales": {
            "percentiles_bucket": {
                "buckets_path": "sales_per_month>sales",
                "percents": [
                    25,
                    50,
                    75
                ]
            }
        }
    },
)
print(resp)
response = client.search(
  index: 'sales',
  body: {
    size: 0,
    aggregations: {
      sales_per_month: {
        date_histogram: {
          field: 'date',
          calendar_interval: 'month'
        },
        aggregations: {
          sales: {
            sum: {
              field: 'price'
            }
          }
        }
      },
      percentiles_monthly_sales: {
        percentiles_bucket: {
          buckets_path: 'sales_per_month>sales',
          percents: [
            25,
            50,
            75
          ]
        }
      }
    }
  }
)
puts response
const response = await client.search({
  index: "sales",
  size: 0,
  aggs: {
    sales_per_month: {
      date_histogram: {
        field: "date",
        calendar_interval: "month",
      },
      aggs: {
        sales: {
          sum: {
            field: "price",
          },
        },
      },
    },
    percentiles_monthly_sales: {
      percentiles_bucket: {
        buckets_path: "sales_per_month>sales",
        percents: [25, 50, 75],
      },
    },
  },
});
console.log(response);
POST /sales/_search
{
  "size": 0,
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "month"
      },
      "aggs": {
        "sales": {
          "sum": {
            "field": "price"
          }
        }
      }
    },
    "percentiles_monthly_sales": {
      "percentiles_bucket": {
        "buckets_path": "sales_per_month>sales", 
        "percents": [ 25.0, 50.0, 75.0 ]         
      }
    }
  }
}

buckets_path указывает этому агрегированию по квантилям, что мы хотим вычислить квантили для sales агрегирования в sales_per_month гистограмме дат.

percents определяет, какие квантили мы хотим вычислить, в данном случае 25-й, 50-й и 75-й.

И вот возможный ответ:

{
   "took": 11,
   "timed_out": false,
   "_shards": ...,
   "hits": ...,
   "aggregations": {
      "sales_per_month": {
         "buckets": [
            {
               "key_as_string": "2015/01/01 00:00:00",
               "key": 1420070400000,
               "doc_count": 3,
               "sales": {
                  "value": 550.0
               }
            },
            {
               "key_as_string": "2015/02/01 00:00:00",
               "key": 1422748800000,
               "doc_count": 2,
               "sales": {
                  "value": 60.0
               }
            },
            {
               "key_as_string": "2015/03/01 00:00:00",
               "key": 1425168000000,
               "doc_count": 2,
               "sales": {
                  "value": 375.0
               }
            }
         ]
      },
      "percentiles_monthly_sales": {
        "values" : {
            "25.0": 375.0,
            "50.0": 375.0,
            "75.0": 550.0
         }
      }
   }
}

Реализация percentiles_bucket

Квантили вычисляются точно и не являются приблизительными (в отличие от метрики Квантили). Это означает, что реализация сохраняет отсортированный список данных в памяти для вычисления квантилей, прежде чем удалить данные. Возможно возникновение проблем с памятью, если вы попытаетесь рассчитать квантили по миллионам точек данных в одной percentiles_bucket.

Агрегирование Percentile Bucket возвращает ближайшую точку входных данных к запрошенному квантилю, округляя индексы до положительной бесконечности; оно не выполняет интерполяцию между точками данных. Например, если имеется восемь точек данных, и вы запрашиваете 50%th квантиль, оно вернет 4th элемент, потому что ROUND_UP(.50 * (8-1)) равен 4.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/search-aggregations-pipeline-percentiles-bucket-aggregation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API