Агрегирование по квантилям (корзина)
Вспомогательное агрегирование, которое вычисляет квантили по всем корзинам указанного метрического агрегирования в смежном агрегировании. Указанная метрика должна быть числовой, а смежное агрегирование должно быть агрегированием с несколькими корзинами.
Синтаксис
Агрегирование percentiles_bucket выглядит так:
{
"percentiles_bucket": {
"buckets_path": "the_sum"
}
} Таблица 78. percentiles_bucket Параметры
| Имя параметра | Описание | Обязательно | Значение по умолчанию |
|---|---|---|---|
| Путь к корзинам, для которых необходимо найти квантили (см. | Обязательно | |
| Политика, применяемая при обнаружении пробелов в данных (см. Обработка пробелов в данных для получения дополнительных сведений) | Необязательно |
|
| Шаблон DecimalFormat для выходного значения. При указании формат значения возвращается в свойстве | Необязательно |
|
| Список квантилей для вычисления | Необязательно |
|
| Флаг, который возвращает диапазон в виде хеша вместо массива пар ключ-значение | Необязательно |
|
Следующий фрагмент вычисляет квантили для корзин совокупного ежемесячного 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 ]
}
}
}
} |
| |
|
|
И вот возможный ответ:
{
"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