Sql 如何在德鲁伊从小组返回的结果中执行选择?
我很难将下面这个简单的SQL查询转换为Druid:Sql 如何在德鲁伊从小组返回的结果中执行选择?,sql,json,druid,Sql,Json,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",
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
查询中选择任意维度
严格地说,即使是SQL查询也没有意义。如果对于给定的国家、城市
组合,有许多不同的名称
和街道
值,那么如何将其压缩到一行中?您必须聚合它们,例如使用max
函数
在这种情况下,您可以在数据中包含与维度和度量相同的列,例如name\u dim
和name\u metric
,并在度量上包含相应的聚合,max(name\u metric)
请注意,如果这些列,
name
等具有高粒度值,那么这将杀死德鲁伊的汇总功能。我已经更新了上面的查询,使其更有用。在对country and city进行分组后,我抓取country
、city
、以及每组中所有这些行的计数
,以查看哪个国家和城市名为玛丽
的人数最多。但是你知道我如何将这个查询转换成德鲁伊代码(上面的JSON
)吗?但是你的内部查询似乎正是你所需要的。使用过滤器和longSum
聚合进行分组。删除外部查询,然后只尝试内部查询。