是维度上的聚合(计数),而不是 Druid 支持的指标上的聚合(计数)
Posted
技术标签:
【中文标题】是维度上的聚合(计数),而不是 Druid 支持的指标上的聚合(计数)【英文标题】:Is aggregation (count) on dimension but not on metrics supported by Druid 【发布时间】:2015-11-25 06:40:01 【问题描述】:例如,有两个维度:[国家、网站]和一个指标:[PV]。
我想知道每个国家网站的平均 PV。
要做到这一点,很容易获得每个国家/地区的总PV,但是很难获得每个国家/地区的网站数量,而且预期的结果是总 PV(每个国家/地区)除以网站数量(每个国家/地区)。
我可以做的是按如下国家和网站应用“groupBy”查询,然后在我的应用程序中按国家以外的国家对结果进行分组。 非常非常非常慢,因为查询从 Druid 中提取了大量数据,其中大部分数据只是为了求和而毫无意义。
"queryType": "groupBy",
"dataSource": "--",
"dimensions": [
"country",
"website"
],
"granularity": "all",
"intervals": [
"--"
],
"aggregations": [
"type": "longSum",
"name": "PV",
"fieldName": "PV"
]
有人可以帮忙吗?我想知道德鲁伊不可能不支持这样一个常见的查询。
提前致谢。
为了清楚起见,我用SQL描述了我的预期结果,如果你知道我想做什么或不熟悉SQL,请忽略以下部分。
SELECT country, sum(a.PV_all) / count(a.website) as PV_AVG FROM
(SELECT country, website, SUM(PV) as PV_all FROM DB GROUP BY country, website ) a
GROUP BY country
【问题讨论】:
【参考方案1】:您是否尝试过使用嵌套 groupBy 查询?德鲁伊支持。 简而言之,您可以拥有类似的东西
"queryType": "groupBy",
"dataSource":
"type": "query",
"query":
"queryType": "groupBy",
"dataSource": "yourDataSource",
"granularity": "--",
"dimensions": ["country", "website"],
"aggregations": [
"type": "longSum",
"name": "PV",
"fieldName": "PV"
],
"intervals": [ "2012-01-01T00:00:00.000/2020-01-03T00:00:00.000" ]
,
"granularity": "all",
"dimensions": ["country"],
"aggregations": [
----
],
"intervals": [ "2012-01-01T00:00:00.000/2020-01-03T00:00:00.000" ]
【讨论】:
以上是关于是维度上的聚合(计数),而不是 Druid 支持的指标上的聚合(计数)的主要内容,如果未能解决你的问题,请参考以下文章
druid vs elasticSearch druid 和es 对比