apache calcite 上的 VolcanoPlanner 给出了排名成本的例外

问题描述

嗨,我正在使用 apache calcite,我编写的查询包含排名,但 apache calcite 上的 Volcanoplanner 给出了排名成本的例外,

代码

select ( CASE WHEN ((EDR_VERSION = 'TVRECHARGE' or EDR_VERSION = 'TRECHARGE') and WALLET in ('XTRATIME','XTradAT1','XTradAT2') and REC_TYPE = 20) THEN 'EXTRA-TIME' WHEN (EDR_VERSION = 'TRECHARGE' and SOURCE_CHANNEL like 'PPVS%' and REC_TYPE = 20) THEN 'VOUCHER' WHEN (EDR_VERSION = 'TVRECHARGE' and SOURCE_CHANNEL = 'VRXML:SAAE' and REC_TYPE = 20 and REASON_FOR_DEBIT_CREDIT in ('ABSA:DAR','FNB:DAR','Nedbank:DAR','SBSA:ATM','SBSA:DAR','SBSA:WEB','AfricanBank:DAR') ) THEN 'BANK RECHARGE' WHEN (EDR_VERSION = 'Me2U' and REC_TYPE = 31) THEN 'ME2U' ELSE 'OTHER' END ) RECHARGE_METHOD from ( SELECT EDR_VERSION,SOURCE_CHANNEL,WALLET,REC_TYPE,REASON_FOR_DEBIT_CREDIT,rank() over (order by EVENT_DT desc) as RN FROM test.ttt where rec_type IN (20,69,31) AND wallet not in ('XTRECHARGE') ) where RN=1

我得到的异常:

java.lang.AssertionError: rel [rel#850837:EnumerableWindow.ENUMERABLE.[[]](input=rel#850836:Subset#2.ENUMERABLE.[],window#0=window(partition {} order by [5 DESC] range between UNBOUNDED PRECEDING and CURRENT ROW aggs [RANK()]))] has lower cost {69.75 rows,201.01 cpu,0.0 io} than best cost {76.0 rows,213.51 cpu,0.0 io} of subset [rel#850838:Subset#6.ENUMERABLE.[]]
    at org.apache.calcite.plan.volcano.Volcanoplanner.validate(Volcanoplanner.java:910) 

what I try : 我在谷歌搜索并在此处找到了 Volcanoplanner 的代码 https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java ,根据此代码relCost.isLt(subset.bestCost)

时出现错误

谁能帮我解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...