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

Druid Roll Up功能未按预期工作的原因排查

Druid Kafka摄入后同一维度组合出现多条聚合结果问题分析

问题描述

配置了从Kafka读取数据的Druid摄入规范,指定按分钟粒度Roll Up,维度为PURCHASE_STATUS和STORE_ID,仅统计count指标,但查询时同一时间桶、同一维度组合出现多条聚合记录。

摄入规范

{
  "type": "kafka",
  "spec": {
    "dataSchema": {
      "dataSource": "purchase",
      "timestampSpec": {
        "column": "timestamp",
        "format": "millis",
        "missingValue": "1970-01-01T00:00:00.000Z"
      },
      "dimensionsSpec": {
        "dimensions": [
          {
            "type": "string",
            "name": "PURCHASE_STATUS",
            "multiValueHandling": "SORTED_ARRAY",
            "createBitmapIndex": true
          },
          {
            "type": "string",
            "name": "STORE_ID",
            "multiValueHandling": "SORTED_ARRAY",
            "createBitmapIndex": true
          }
        ],
        "dimensionExclusions": [
          "__time",
          "total_count",
          "timestamp"
        ],
        "includeAllDimensions": false
      },
      "metricsSpec": [
        {
          "type": "count",
          "name": "total_count"
        }
      ],
      "granularitySpec": {
        "type": "uniform",
        "segmentGranularity": "TEN_MINUTE",
        "queryGranularity": "MINUTE",
        "rollup": true,
        "intervals": []
      }
    }
  }
}

查询语句

SELECT
__time, STORE_ID, PURCHASE_STATUS, total_count
FROM mz_purchase
WHERE __time >= CURRENT_TIMESTAMP - INTERVAL '30' MINUTE ORDER BY __time DESC

查询结果

2022-12-07T06:37:00.000Z    1   Status1 3
2022-12-07T06:37:00.000Z    1   Status2 2
2022-12-07T06:37:00.000Z    1   Status1 1
2022-12-07T06:37:00.000Z    1   Status3 23

问题原因及解决办法

1. 实时摄入的中间segment未合并

Druid Kafka实时任务运行时,会先生成未完全合并的中间segment,只有当segment达到大小或时间阈值后,才会触发后台compaction操作合并同一维度的聚合结果。

  • 解决:等待自动compaction完成,或手动触发compaction任务;也可调整Kafka摄入任务的maxRowsPerSegment、maxTotalRows参数,让segment更快满足合并条件。

2. 维度值存在隐式差异

表面相同的维度值可能包含空格、大小写不一致、特殊字符等细微差异,Druid会将其视为不同维度值。

  • 解决:在摄入阶段添加数据清洗逻辑,比如通过transformSpec统一处理维度值:
    "transformSpec": {
      "transforms": [
        {
          "type": "expression",
          "name": "PURCHASE_STATUS",
          "expression": "trim(PURCHASE_STATUS)"
        },
        {
          "type": "expression",
          "name": "STORE_ID",
          "expression": "trim(STORE_ID)"
        }
      ]
    }
    
    将上述配置添加到dataSchema下,与timestampSpec同级。

3. 查询未显式触发聚合

实时查询若未强制聚合,可能返回中间状态的原始聚合结果。

  • 解决:修改查询语句,显式按分钟和维度分组聚合:
    SELECT
    TIME_FLOOR(__time, 'PT1M') AS minute_time,
    STORE_ID,
    PURCHASE_STATUS,
    SUM(total_count) AS total_count
    FROM mz_purchase
    WHERE __time >= CURRENT_TIMESTAMP - INTERVAL '30' MINUTE
    GROUP BY minute_time, STORE_ID, PURCHASE_STATUS
    ORDER BY minute_time DESC
    

4. 多值维度配置不匹配

维度配置了multiValueHandling: SORTED_ARRAY,若原始数据并非多值字段,会导致不必要的数组拆分,引发聚合异常。

  • 解决:确认原始数据字段类型,若为单值字段,将multiValueHandling改为SINGLE_VALUE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:02:01