小编典典

如何在GROUP BY Druid返回的结果中执行SELECT?

sql

我很难将下面的这个简单的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" ]
}

上面的查询正在运行,但是Druid数据源中的groupBy似乎都没有被评估,因为我在输出中看到的人的名字不是Mary。是否有人对如何进行这项工作有任何意见?


阅读 248

收藏
2021-04-14

共1个答案

小编典典

简单的答案是您不能在groupBy查询中选择任意尺寸。

严格来讲,即使是SQL查询也没有意义。如果给定的组合country, city也有许多不同的价值观namestreet,那你怎么挤的是成单行?您必须汇总它们,例如通过使用max函数。

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

请注意,如果这些列name等具有较高的粒度值,则将终止Druid的汇总功能。

2021-04-14