Pipeline aggregations
Тема дорожной карты · Elasticsearch
Конвейерные агрегации в Elasticsearch — это класс агрегаций, принимающих в качестве входных данных результаты других агрегаций (а не исходные документы), что позволяет вычислять статистику более высокого порядка над результатами агрегаций. Среди распространённых конвейерных агрегаций: derivative (скорость изменения между последовательными бакетами date_histogram), moving_avg (сглаженные средние по скользящему окну), cumulative_sum (нарастающий итог по упорядоченным бакетам), bucket_selector (фильтрация бакетов, не удовлетворяющих условию) и bucket_sort (сортировка бакетов по значению подагрегации). Конвейерные агрегации задаются внутри ключа aggs в поисковом запросе на том же уровне или внутри агрегации, на которую они ссылаются, с помощью параметра buckets_path, указывающего на дочернюю или родительскую агрегацию, чьи результаты они потребляют. Поскольку конвейерные агрегации в Elasticsearch работают с уже вычисленными результатами агрегаций, а не с исходными значениями документов, их накладные расходы минимальны по сравнению с базовыми метрическими и бакетными агрегациями, поверх которых они надстраиваются. Kibana активно использует конвейерные агрегации в редакторах визуализаций Lens и TSVB для отображения линий трендов, скользящих средних и нарастающих итогов по временным рядам данных Elasticsearch.
Как это работает
Pipeline aggregations: суммируйте + группируйте документы во время query. Bucket aggregations группируют docs (terms = group by field, date_histogram = group by time, range = группы по диапазонам). Metric aggregations считают статы (sum, avg, min/max, percentiles, cardinality). Pipeline aggregations считают над другими aggregations (cumulative sums, moving averages, derivatives). Aggregations — основа Kibana dashboards + log аналитики, но дороги на high-cardinality полях.
Когда применять
Всегда aggregations с filtered query — aggregations по всему индексу дорого. Тюньте size на terms aggregations (дефолт 10 — больше = больше памяти + медленнее). cardinality (HyperLogLog++) для unique counts на масштабе — exact counts квадратичны. Для high-cardinality terms (user IDs) — composite agg + paging вместо одной огромной terms agg.
Типичные ошибки
Ловушки Pipeline aggregations: aggregating без фильтра (сканирует весь индекс); огромный size на terms agg (memory blow-up); aggregating на text поле (используйте keyword subfield); не используют shard_size для контроля intra-shard accuracy vs cost trade-off.