问题描述
嗨,我正在使用 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 (将#修改为@)