Apache Ignite 2.14.0默认H2查询引擎报uniqueAlias为空错误求助
解决Apache Ignite 2.14.0默认H2查询处理器的嵌套查询空指针异常
问题详情
使用Apache Ignite 2.14.0的默认H2查询处理器时,解析特定嵌套SELECT语句会触发以下空指针异常:
class org.apache.ignite.IgniteCheckedException: Cannot invoke "org.apache.ignite.internal.processors.query.h2.sql.GridSqlAlias.alias()" because "uniqueAlias" is null
复现步骤
- 执行建表与插入语句:
CREATE TABLE TEST ( ACCT_CD VARCHAR PRIMARY KEY, ACCT_TYP_CD VARCHAR ); INSERT INTO TEST (ACCT_CD, ACCT_TYP_CD) VALUES ('TEST', 'TEST');
- 执行以下嵌套查询触发异常:
SELECT ACCT_CD FROM ( SELECT ACCT_CD FROM ( SELECT ACCT_CD FROM TEST ) );
特殊现象
将第二层SELECT改为通配符*后,查询可正常执行:
SELECT ACCT_CD FROM ( SELECT * FROM ( SELECT ACCT_CD FROM TEST ) );
同时,使用Calcite查询处理器执行原报错查询可成功:
SELECT /*+ QUERY_ENGINE('calcite') */ ACCT_CD FROM ( SELECT ACCT_CD FROM ( SELECT ACCT_CD FROM TEST ) );
配置层面解决方案
该问题是Ignite 2.14.0版本中H2查询处理器的解析缺陷,通过配置切换到Calcite查询引擎即可解决,提供两种配置方式:
全局默认切换(所有查询使用Calcite)
修改Ignite配置文件(如ignite-config.xml),添加查询引擎配置:
<bean class="org.apache.ignite.configuration.IgniteConfiguration"> <!-- 保留原有其他配置项 --> <property name="queryConfiguration"> <bean class="org.apache.ignite.configuration.QueryConfiguration"> <!-- 设置默认查询引擎为Calcite --> <property name="defaultQueryEngine" value="calcite"/> </bean> </property> </bean>
单查询临时切换
如果不需要全局修改,可在目标查询前添加Hint强制使用Calcite引擎,格式如下:
SELECT /*+ QUERY_ENGINE('calcite') */ [查询内容]
内容的提问来源于stack exchange,提问作者Winter
相关产品推荐
相关产品推荐

