Apache Ignite关联查询无结果:是Bug还是操作疏漏?
Apache Ignite关联查询无结果问题排查
问题现象
在单节点环境的Apache Ignite 2.14.0和2.10.0版本中执行关联查询时,未添加账户ID过滤条件的语句无任何结果返回,但添加该条件后可正常返回对应行。
对比查询语句
无结果的查询语句
SELECT * FROM PERSON AS p, ACCOUNT AS a WHERE p.ACCOUNT_ID = a.id AND p.ID = '4nFwLM9FRxKZJb4V9vtdlw'
正常返回的查询语句
SELECT * FROM PERSON AS p, ACCOUNT AS a WHERE p.ACCOUNT_ID = a.id AND p.ID = '4nFwLM9FRxKZJb4V9vtdlw' AND a.id = 'wZvcAnbBSpOps9oteH-Oxw'
涉及表结构
CREATE TABLE umm_person ( id varchar(36) NOT NULL primary key, account_id varchar(36) NOT NULL ); CREATE INDEX idx_person_account_id ON umm_person (account_id); CREATE TABLE main_account ( id varchar(36) NOT NULL primary key, );
节点配置代码
public class IgniteNode { public static void main(String[] args) throws Exception { IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setClientMode(false); cfg.setPeerClassLoadingEnabled(true); cfg.setCacheConfiguration(); Ignition.start(cfg); } }
问题分析
最直接的操作疏漏是查询语句使用的表名与实际创建的表名不匹配:
- 查询中写的是
PERSON和ACCOUNT - 实际建表的名称是
umm_person和main_account
Ignite SQL默认对表名大小写敏感(除非配置sql.schema.case-insensitive参数为true),这会导致查询时找不到对应表,自然无结果返回。而添加a.id = 'wZvcAnbBSpOps9oteH-Oxw'后看似正常,大概率是测试时的误操作导致(比如临时改用了正确表名),建议先将查询语句中的表名修正为实际创建的umm_person和main_account再测试。
另外,节点配置里cfg.setCacheConfiguration();未传入任何缓存配置,单节点环境下Ignite会用默认配置创建表对应缓存,这部分不是核心问题,但建议显式配置缓存以避免后续潜在异常。
内容的提问来源于stack exchange,提问作者MarianP
相关产品推荐
相关产品推荐

