如何在 GROUP BY Druid 返回的结果中执行 SELECT?
How to perform a SELECT in the results returned from a GROUP BY 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",
"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
查询中 select 任意维度。
严格来说连SQL查询都没有意义。如果对于 country, city
的给定组合,name
和 street
有许多不同的值,那么如何将其压缩到一行中?您必须汇总它们,例如通过使用 max
函数。
在这种情况下,您可以在数据中包含与维度和指标相同的列,例如name_dim
和 name_metric
,并包括对您的指标的相应聚合,max(name_metric)
。
请注意,如果这些列 name
等具有高粒度值,那么这将破坏 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",
"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
查询中 select 任意维度。
严格来说连SQL查询都没有意义。如果对于 country, city
的给定组合,name
和 street
有许多不同的值,那么如何将其压缩到一行中?您必须汇总它们,例如通过使用 max
函数。
在这种情况下,您可以在数据中包含与维度和指标相同的列,例如name_dim
和 name_metric
,并包括对您的指标的相应聚合,max(name_metric)
。
请注意,如果这些列 name
等具有高粒度值,那么这将破坏 Druid 的汇总功能。