如何在GROUP BY德鲁伊返回的结果中执行SELECT?

时间:2016-07-23 21:30:20

标签: sql json druid

我很难将下面这个简单的SQL查询转换为德鲁伊:

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甚至没有被评估,因为我看到输出中的人名字不是玛丽。有没有人对如何使这项工作有任何意见?

1 个答案:

答案 0 :(得分:2)

简单回答是,您无法在groupBy查询中选择任意维度。

严格来说,即使SQL查询也没有意义。如果对于country, city的给定组合,namestreet有许多不同的值,那么如何将其压缩成一行?你必须聚合它们,例如使用max函数。

在这种情况下,您可以在数据中包含与维度和指标相同的列,例如name_dimname_metric,并在指标max(name_metric)上添加相应的汇总。

请注意,如果这些列name等具有高粒度值,则会杀死德鲁伊的汇总功能。