Как выполнить SELECT в результатах, возвращаемых GROUP BY Druid?

Мне трудно преобразовать этот простой SQL-запрос ниже в Druid:

SELECT country, city, Count(*) 
FROM people_data 
WHERE name="Mary" 
GROUP BY country, city;

Итак, я придумал этот запрос до сих пор:

{
  "queryType": "groupBy",
  "dataSource" : "people_data",
  "granularity": "all",
  "metric" : "num_of_pages",
  "dimensions": ["country", "city"],
  "filter" : {
      "type" : "and",
      "fields" : [
          {
            "type": "in",
            "dimension": "name",
            "values": ["Mary"]
          },
          {
            "type" : "javascript",
            "dimension" : "email",
            "function" : "function(value) { return (value.length !== 0) }"
          }
      ]
  },
  "aggregations": [

    { "type": "longSum", "name": "num_of_pages", "fieldName": "count" }
  ],
  "intervals": [ "2016-07-20/2016-07-21" ]
}

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


person Community    schedule 23.07.2016    source источник


Ответы (1)


Простой ответ заключается в том, что вы не можете выбирать произвольные измерения в своих groupBy запросах.

Строго говоря, даже SQL-запрос не имеет смысла. Если для заданной комбинации country, city существует много разных значений name и street, то как вы втиснете их в одну строку? Вы должны агрегировать их, например. с помощью функции max.

В этом случае вы можете включить один и тот же столбец в свои данные как параметр и показатель, например. name_dim и name_metric и включите соответствующую агрегацию по вашей метрике, max(name_metric).

Обратите внимание, что если эти столбцы, name и т. д., имеют высокие значения детализации, то это убьет функцию свертки Druid.

person Nikem    schedule 25.07.2016
comment
Я обновил запрос выше, чтобы сделать его более полезным. После выполнения group by для страны и города я беру country, city и the count всех этих строк в каждой группе, чтобы увидеть, в какой стране и городе больше всего людей с именем Mary. Но вы случайно не знаете, как я могу перевести этот запрос в код Друида (JSON выше)? - person ; 25.07.2016
comment
но ваш внутренний запрос кажется именно тем, что вам нужно. Группировать по с фильтром и longSum агрегатами. Удалите этот внешний запрос и попробуйте только внутренний. - person Nikem; 26.07.2016