NoneSql запрос перевода Query DSL кибана

Пожалуйста, объясните логику перевода запросов из sql в консоли kibana. Наиболее запутанным является "order": "asc", в то время как я запрашиваю desc.

Числа "10985" и "11030" также выглядят очень странно. Если я перезапущу перевод, эти цифры меняются.

Я делаю перевод запроса:

    POST _sql/translate
{
  "query": "SELECT day_of_week, avg(taxful_total_price) FROM kibana_sample_data_ecommerce WHERE customer_id = 52 GROUP BY day_of_week ORDER BY avg(taxful_total_price) DESC LIMIT 2"
  }

Перевод:

    {
  "size" : 0,
  "query" : {
    "term" : {
      "customer_id" : {
        "value" : 52,
        "boost" : 1.0
      }
    }
  },
  "_source" : false,
  "stored_fields" : "_none_",
  "aggregations" : {
    "groupby" : {
      "composite" : {
        "size" : 1000,
        "sources" : [
          {
            "10985" : {
              "terms" : {
                "field" : "day_of_week",
                "missing_bucket" : true,
                "order" : "asc"
              }
            }
          }
        ]
      },
      "aggregations" : {
        "11030" : {
          "avg" : {
            "field" : "taxful_total_price"
          }
        }
      }
    }
  }
}

1 ответ

Что касается изменяющегося числа, они являются только названиями агрегации; как если бы вы использовали "AS 11030" в sql. Это позволяет вам использовать агрегацию в другой агрегации, ссылаясь на ее имя. Обязательно иметь имя для агрегации в структуре запроса ES. Возможно, это нормальное поведение перевода, чтобы случайным образом называть агрегаты числами. Он не должен иметь отношение к результатам запроса или его поведению.

Имена агрегации не имеют значения, они генерируются случайным образом, но ES-SQL отслеживает, что есть что (очевидно), и всякий раз, когда одной агрегации нужен результат другой, он знает, какой из них использовать.

Существует запрос на улучшение - https://github.com/elastic/elasticsearch/issues/43531 - для согласованного именования, чтобы можно было использовать кеширование. Еще не реализовано и в настоящее время не входит в дорожную карту ближайшего будущего.

Взяв во внимание asc Несоответствие DESC, если вы обратите пристальное внимание, ваш DESC заказ включен AVG в то время как asc сортировка для compositeс termsагрегации, а это разные вещи. ES-SQL выполняет сортировку на "клиентской" стороне агрегатов (в отличие от сервера /ES-стороны), потому что нет ES-запроса, который бы выполнял эту сортировку при использованииcomposite агрегация.

Суть в том, что запрос, который вы видите, завершен, но не совсем, потому что запрос ES-SQL выполняется в Elasticsearch, но есть также задача на стороне клиента, которая выполняет фактическую сортировку с помощью AVG. Существует вопрос улучшения уже открыт для повышенияtranslate API, чтобы указать, что, по крайней мере, сгенерированного запроса может быть недостаточно для достижения тех же результатов, которые были бы у одного пользователя, если бы он / она выполнял этот запрос на самом ES.

Другие вопросы по тегам