2.5.4版本,只要有group时,计算count(distinct array类型)报错,如果没有group,直接计算count(distinct array类型)是不会报错。

【详述】
2.5.4版本,只要有group时,计算count(distinct array类型)报错,如果没有group,直接计算count(distinct array类型)是不会报错。

sql如下:

SELECT
b1
, count(distinct a1) as cnt
from (
SELECT split(‘a,b,c’, ‘,’) as a1, ‘aaa’ as b1
) t1
group by b1
;

【StarRocks版本】2.5.4
【集群规模】3fe+5be

排查发现是跟 enable_distinct_column_bucketization 这个参数有关,这个参数如果设置成 true 就执行报错,如果是false就执行成功,是2.5.4版本引入的。2.5.3里面没有

count(distinct xx) 只要是用去重就报错,如果是count(xx) 就没问题。

麻烦大佬解释一下,这个参数的作用?

count(distinct xxx)目前有两种实现方法:

  1. 2阶段聚合: 会采用multi_distinct_count函数.
  2. 3阶段聚合: count distinct column会放在group by中.

方法2目前测试不会出错, 但是方法2缺乏复杂类型的json/array/struct/map的multi_distinct_count函数签名支持,函数解析报错. 去重查询的bucketization优化, 会使用multi_distinct_count函数,因此报错了.
建议关闭enable_distinct_column_bucketization=false, 如果想开启优化,则添加skew hint, 比如
select a, count(distinct [skew] b) from t group by a.

目前在尝试修复: https://github.com/StarRocks/starrocks/pull/23783

大佬,具体在那些小版本修复呢?

该 pr 已合入 2.5.7之后版本 以及 3.0.1之后版本