You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Druid如何按单字段groupBy并在同一行返回多组聚合值

Apache Druid 单维度groupBy返回多维度统计问题解答

核心问题答复

  • 按单个列执行groupBy操作时,完全可以返回其他维度的统计结果,不需要将额外统计维度加入分组维度列表。
  • 要在单维度groupBy的结果行中返回不同维度的分组统计项,使用filtered类型聚合器即可实现,之前尝试未生效是查询写法存在错误,并非方案不可行。

原有查询的错误点

  1. JSON语法错误:多处键名错误将冒号写在了引号内部,比如"context:"、"type: "count"这类写法会导致配置无法被Druid正常解析,新增的聚合器配置根本没有生效。
  2. 聚合器配置错误:filtered聚合器内部嵌套的count类型聚合器不需要指定fieldName,count聚合器的逻辑是统计符合条件的行数,无需绑定特定字段。
  3. 聚合器选型错误:grouping聚合器的作用是多维度分组时标识当前结果行的聚合维度层级,完全不适用单维度分组下的条件统计场景,所以达不到预期效果。

正确查询示例

以下是修正后的可直接运行的native查询写法,按userId分组的同时,会在同一行返回总计数、不同block_id对应的计数:

{
  "queryType": "groupBy",
  "dataSource": "my-data-source",
  "granularity": "all",
  "intervals": ["2022-06-27T03:00:00.000Z/2022-06-28T03:00:00.000Z"],
  "context": { "timeout": 30000 },
  "dimensions": ["userId"],
  "filter": {
    "type": "and",
    "fields": [
      {"type": "or", "fields": [{}]}
    ]
  },
  "aggregations": [
    {"type": "count", "name": "total_count"},
    {
      "type": "filtered",
      "filter": {"type": "selector", "dimension": "block_id", "value": "block1"},
      "aggregator": {"type": "count", "name": "block1_count"}
    },
    {
      "type": "filtered",
      "filter": {"type": "selector", "dimension": "block_id", "value": "block2"},
      "aggregator": {"type": "count", "name": "block2_count"}
    }
  ]
}

如果需要统计其他维度的分组项,只需要按照上述filtered聚合器的格式,在aggregations数组中追加对应过滤条件的配置即可。

预期效果参考

单维度分组多统计项结果示例


内容的提问来源于stack exchange,提问作者PlayHardGoPro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:01:21