Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Агрегирование ›Агрегирование по корзинам

Агрегация автоинтервального гистограммы дат

Многокорзинная агрегация, аналогичная гистограмме дат, за исключением того, что вместо указания интервала для ширины каждой корзины, указывается целевое количество корзин, определяющее необходимое число корзин, а интервал корзин автоматически выбирается для наилучшего достижения этого целевого значения. Количество возвращенных корзин всегда меньше или равно этому целевому значению.

Поле buckets необязательно и по умолчанию имеет 10 корзин, если не указано иное.

Запрос целевого значения в 10 корзин.

POST /sales/_search?size=0
{
  "aggs": {
    "sales_over_time": {
      "auto_date_histogram": {
        "field": "date",
        "buckets": 10
      }
    }
  }
}

Ключи

Внутренне дата представлена как 64-битное число, представляющее отметку времени в миллисекундах с начала эпохи. Эти отметки времени возвращаются как значения полей корзин. key — это та же отметка времени, преобразованная в отформатированную строку даты с использованием формата, указанного с помощью параметра format:

Если format не указан, используется первый формат даты, указанный в схеме поля.

POST /sales/_search?size=0
{
  "aggs": {
    "sales_over_time": {
      "auto_date_histogram": {
        "field": "date",
        "buckets": 5,
        "format": "yyyy-MM-dd" 
      }
    }
  }
}

Поддерживает выразительные шаблоны формата даты формата даты

Ответ:

{
  ...
  "aggregations": {
    "sales_over_time": {
      "buckets": [
        {
          "key_as_string": "2015-01-01",
          "key": 1420070400000,
          "doc_count": 3
        },
        {
          "key_as_string": "2015-02-01",
          "key": 1422748800000,
          "doc_count": 2
        },
        {
          "key_as_string": "2015-03-01",
          "key": 1425168000000,
          "doc_count": 2
        }
      ],
      "interval": "1M"
    }
  }
}

Интервалы

Интервал возвращаемых корзин выбирается на основе данных, собранных агрегацией, таким образом, что количество возвращенных корзин меньше или равно запрошенному значению. Возможные возвращаемые интервалы:

секунды

кратные 1, 5, 10 и 30

минуты

кратные 1, 5, 10 и 30

часы

кратные 1, 3 и 12

дни

кратные 1 и 7

месяцы

кратные 1 и 3

годы

кратные 1, 5, 10, 20, 50 и 100

В худшем случае, когда количество ежедневных корзин слишком велико для запрошенного количества корзин, количество возвращенных корзин составит 1/7 от запрошенного количества корзин.

Временная зона

Даты и время хранятся в Elasticsearch в UTC. По умолчанию, все группирование и округление также выполняется в UTC. Параметр time_zone может быть использован для указания, что группирование должно использовать другую временную зону.

Временные зоны могут быть указаны как смещение UTC в формате ISO 8601 (например, +01:00 или -08:00) или как идентификатор временной зоны, используемый в базе данных TZ, например, America/Los_Angeles.

Рассмотрим следующий пример:

PUT my-index-00001/log/1?refresh
{
  "date": "2015-10-01T00:30:00Z"
}

PUT my-index-00001/log/2?refresh
{
  "date": "2015-10-01T01:30:00Z"
}

PUT my-index-00001/log/3?refresh
{
  "date": "2015-10-01T02:30:00Z"
}

GET my-index-00001/_search?size=0
{
  "aggs": {
    "by_day": {
      "auto_date_histogram": {
        "field":     "date",
        "buckets" : 3
      }
    }
  }
}

Если временная зона не указана, используется UTC, возвращаются три корзины по 1 часу, начиная с полуночи UTC 1 октября 2015 года:

{
  ...
  "aggregations": {
    "by_day": {
      "buckets": [
        {
          "key_as_string": "2015-10-01T00:00:00.000Z",
          "key": 1443657600000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T01:00:00.000Z",
          "key": 1443661200000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T02:00:00.000Z",
          "key": 1443664800000,
          "doc_count": 1
        }
      ],
      "interval": "1h"
    }
  }
}

Если указано time_zone в -01:00, то полуночь начинается за час до полуночи UTC:

GET my-index-00001/_search?size=0
{
  "aggs": {
    "by_day": {
      "auto_date_histogram": {
        "field":     "date",
        "buckets" : 3,
        "time_zone": "-01:00"
      }
    }
  }
}

Сейчас по-прежнему возвращаются три корзины по 1 часу, но первая корзина начинается в 23:00 30 сентября 2015 года, поскольку это местное время для корзины в указанной временной зоне.

{
  ...
  "aggregations": {
    "by_day": {
      "buckets": [
        {
          "key_as_string": "2015-09-30T23:00:00.000-01:00", 
          "key": 1443657600000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T00:00:00.000-01:00",
          "key": 1443661200000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T01:00:00.000-01:00",
          "key": 1443664800000,
          "doc_count": 1
        }
      ],
      "interval": "1h"
    }
  }
}

Значение key_as_string представляет полуночь каждого дня в указанной временной зоне.

При использовании временных зон, которые следуют за изменениями DST (переход на летнее время), корзины, близкие к моменту этих изменений, могут иметь немного другие размеры, чем соседние корзины. Например, рассмотрим начало DST во временной зоне CET: 27 марта 2016 года в 2 часа, время перешло на 1 час вперёд, до 3 часов местного времени. Если результатом агрегации были ежедневные корзины, корзина, охватывающая этот день, будет содержать данные только за 23 часа вместо обычных 24 часов для других корзин. То же самое справедливо для более коротких интервалов, например, 12 часов. Здесь у нас будет только корзина на 11 часов утром 27 марта, когда происходит сдвиг DST.

Параметр минимального интервала

minimum_interval позволяет вызывающему элементу указать минимальный интервал округления, который должен быть использован. Это может повысить эффективность процесса сбора, поскольку агрегация не будет пытаться округлять интервал ниже minimum_interval.

Допустимые единицы измерения для minimum_interval:

  • год
  • месяц
  • день
  • час
  • минута
  • секунда
POST /sales/_search?size=0
{
  "aggs": {
    "sale_date": {
      "auto_date_histogram": {
        "field": "date",
        "buckets": 10,
        "minimum_interval": "minute"
      }
    }
  }
}

Пропущенное значение

Параметр missing определяет, как обрабатывать документы, у которых отсутствует значение. По умолчанию они будут проигнорированы, но также можно рассматривать их как имеющие значение.

POST /sales/_search?size=0
{
  "aggs": {
    "sale_date": {
      "auto_date_histogram": {
        "field": "date",
        "buckets": 10,
        "missing": "2000/01/01" 
      }
    }
  }
}

Документы без значения в поле publish_date попадут в ту же корзину, что и документы со значением 2000-01-01.

© 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/7.17/search-aggregations-bucket-autodatehistogram-aggregation.html

Spec-Zone.ru

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