Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›REST API ›API агрегирования

API получения возможностей задания агрегирования

Устарело в версии 8.11.0.

Агрегирование будет удалено в будущей версии. Используйте downsampling вместо этого.

Новая ссылка на API

Для получения самых актуальных данных об API обратитесь к API агрегирования.

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

Запрос

GET _rollup/data/<index>

Предварительные условия

  • Если включены функции безопасности Elasticsearch, необходимо иметь monitor, monitor_rollup, manage или manage_rollup права кластера для использования этого API. Дополнительную информацию см. в Права доступа к безопасности.

Описание

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

Этот API позволяет просмотреть индекс и определить:

  1. Есть ли в кластере данные агрегирования, связанные с этим индексом?
  2. Если ответ на первый вопрос положительный, какие поля были агрегированы, какие агрегации могут быть выполнены и где находятся данные?

Параметры пути

<index>
(строка) Индекс, индексы или шаблон индекса, для которых нужно вернуть возможности агрегирования. _all может использоваться для получения возможностей агрегирования для всех заданий.

Примеры

Представьте, что у нас есть индекс с именем sensor-1, заполненный исходными данными. Мы знаем, что данные будут расти со временем, поэтому будут sensor-2, sensor-3 и т. д. Давайте создадим задание агрегирования, которое нацелено на шаблон индекса sensor-*, чтобы справиться с этим будущим масштабированием:

resp = client.rollup.put_job(
    id="sensor",
    index_pattern="sensor-*",
    rollup_index="sensor_rollup",
    cron="*/30 * * * * ?",
    page_size=1000,
    groups={
        "date_histogram": {
            "field": "timestamp",
            "fixed_interval": "1h",
            "delay": "7d"
        },
        "terms": {
            "fields": [
                "node"
            ]
        }
    },
    metrics=[
        {
            "field": "temperature",
            "metrics": [
                "min",
                "max",
                "sum"
            ]
        },
        {
            "field": "voltage",
            "metrics": [
                "avg"
            ]
        }
    ],
)
print(resp)
const response = await client.rollup.putJob({
  id: "sensor",
  index_pattern: "sensor-*",
  rollup_index: "sensor_rollup",
  cron: "*/30 * * * * ?",
  page_size: 1000,
  groups: {
    date_histogram: {
      field: "timestamp",
      fixed_interval: "1h",
      delay: "7d",
    },
    terms: {
      fields: ["node"],
    },
  },
  metrics: [
    {
      field: "temperature",
      metrics: ["min", "max", "sum"],
    },
    {
      field: "voltage",
      metrics: ["avg"],
    },
  ],
});
console.log(response);
PUT _rollup/job/sensor
{
  "index_pattern": "sensor-*",
  "rollup_index": "sensor_rollup",
  "cron": "*/30 * * * * ?",
  "page_size": 1000,
  "groups": {
    "date_histogram": {
      "field": "timestamp",
      "fixed_interval": "1h",
      "delay": "7d"
    },
    "terms": {
      "fields": [ "node" ]
    }
  },
  "metrics": [
    {
      "field": "temperature",
      "metrics": [ "min", "max", "sum" ]
    },
    {
      "field": "voltage",
      "metrics": [ "avg" ]
    }
  ]
}

Затем мы можем получить возможности агрегирования для этого шаблона индекса (sensor-*) с помощью следующей команды:

resp = client.rollup.get_rollup_caps(
    id="sensor-*",
)
print(resp)
response = client.rollup.get_rollup_caps(
  id: 'sensor-*'
)
puts response
const response = await client.rollup.getRollupCaps({
  id: "sensor-*",
});
console.log(response);
GET _rollup/data/sensor-*

Это приведет к следующему ответу:

{
  "sensor-*" : {
    "rollup_jobs" : [
      {
        "job_id" : "sensor",
        "rollup_index" : "sensor_rollup",
        "index_pattern" : "sensor-*",
        "fields" : {
          "node" : [
            {
              "agg" : "terms"
            }
          ],
          "temperature" : [
            {
              "agg" : "min"
            },
            {
              "agg" : "max"
            },
            {
              "agg" : "sum"
            }
          ],
          "timestamp" : [
            {
              "agg" : "date_histogram",
              "time_zone" : "UTC",
              "fixed_interval" : "1h",
              "delay": "7d"
            }
          ],
          "voltage" : [
            {
              "agg" : "avg"
            }
          ]
        }
      }
    ]
  }
}

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

Далее приведен список полей, содержащих данные, подходящие для поиска агрегирования. Здесь мы видим четыре поля: node, temperature, timestamp и voltage. Каждое из этих полей перечисляет возможные агрегации. Например, для поля temperature можно использовать агрегации min, max или sum, но только date_histogram для поля timestamp.

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

Мы также можем получить ту же информацию с запросом к _all:

resp = client.rollup.get_rollup_caps(
    id="_all",
)
print(resp)
response = client.rollup.get_rollup_caps(
  id: '_all'
)
puts response
const response = await client.rollup.getRollupCaps({
  id: "_all",
});
console.log(response);
GET _rollup/data/_all

Однако обратите внимание, что если мы используем имя конкретного индекса (sensor-1), мы не получим никаких возможностей агрегирования:

resp = client.rollup.get_rollup_caps(
    id="sensor-1",
)
print(resp)
response = client.rollup.get_rollup_caps(
  id: 'sensor-1'
)
puts response
const response = await client.rollup.getRollupCaps({
  id: "sensor-1",
});
console.log(response);
GET _rollup/data/sensor-1
{

}

Почему? Исходное задание агрегирования было настроено для конкретного шаблона индекса (sensor-*), а не для конкретного индекса (sensor-1). Таким образом, хотя индекс принадлежит шаблону, задание агрегирования действителен только для всего шаблона, а не только для одного из содержащихся в нём индексов. Поэтому API получения возможностей агрегирования возвращает информацию только на основе первоначально настроенного имени индекса или шаблона.

© 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/rollup-get-rollup-caps.html

Spec-Zone.ru

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