我很难将下面的这个简单的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。是否有人对如何进行这项工作有任何意见?
简单的答案是您不能在groupBy查询中选择任意尺寸。
groupBy
严格来讲,即使是SQL查询也没有意义。如果给定的组合country, city也有许多不同的价值观name和street,那你怎么挤的是成单行?您必须汇总它们,例如通过使用max函数。
country, city
name
street
max
在这种情况下,您可以在数据中包含与维度和指标相同的列,例如name_dim和name_metric,并在指标上包含相应的汇总max(name_metric)。
name_dim
name_metric
max(name_metric)
请注意,如果这些列name等具有较高的粒度值,则将终止Druid的汇总功能。