Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
5.0-alpha
-
None
Description
参考如下SQL,where中的两个and条件互斥。
select count(distinct STR0) from TDVT.CALCS WHERE (CALCS."STR0" = '0330FH') AND (CALCS."STR0" = '0798FH')
Root Cause
where条件为 = 时,查询一定是互斥的,生成relnode之后会被解析为常量查询,走calcite,calcite这里有bug,不支持distinct aggregation然后报错。
Fix Design
修复Calcite的问题,难度比较大,时间跨度也会比较长。
快速的修复方案,可以通过修改是否路由到calcite的判断条件(org.apache.kylin.query.engine.QueryExec#isCalciteEngineCapable),当AggregateRel的input是values并且aggCall是distinct的时候,使该常量查询路由到spark,绕过calcite的问题。