3

我很难将下面这个简单的 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 的人。有人对如何使这项工作有任何意见吗?

4

1 回答 1

2

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

严格来说,即使是 SQL 查询也没有任何意义。如果对于给定的组合,andcountry, city有许多不同的值,那么如何将其压缩到一行中?您必须聚合它们,例如通过使用函数。namestreetmax

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

请注意,如果这些列name等具有高粒度值,那么这将扼杀 Druid 的汇总功能。

于 2016-07-25T17:43:52.943 回答