是维度上的聚合(计数),而不是 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 对比

druid 远程命令执行(CVE-2021-25646)

druid 远程命令执行(CVE-2021-25646)

CVE-2021-25646Apache Druid 远程代码执行漏洞复现

聚合而不减少数据框的维度[重复]

apache druid 使用 log4j2 防止日志爆炸(0.13版本)