Ignite 2.11.0升级后通过SqlFieldsQuery、DBeaver、REST均无法查询到数据
SQL schema映射规则变更检查
2.9版本开始Ignite调整了默认SQL schema映射逻辑:2.8及更早版本未显式配置sqlSchema的缓存默认会注册到PUBLICschema,2.9+版本无该配置的缓存默认不会绑定到任何SQL schema,自然无法通过SQL接口查询到数据。
需为所有需要支持SQL查询的缓存显式添加配置:CacheConfiguration cacheCfg = new CacheConfiguration("业务缓存名").setSqlSchema("PUBLIC")
(也可将PUBLIC替换为你自定义的schema名称)持久化元数据与索引重建
如果升级后直接复用2.8版本的持久化数据目录,可能存在旧版本元数据与新版本SQL引擎不兼容的问题。可以先在集群启动前添加系统配置IGNITE_SQL_RESTORE_INDEXES_ON_STARTUP=true,启动时自动重建所有SQL索引;也可以集群启动后针对每个业务表执行命令ALTER TABLE <表名> REBUILD INDEX手动重建索引。查询端参数配置校验
- JDBC/DBeaver侧:2.11版本JDBC连接默认不会自动扫描所有schema,需要在连接URL末尾追加参数
?schema=PUBLIC,或者每次查询前先执行USE PUBLIC语句切换到缓存绑定的schema。 - REST接口侧:调用查询接口时必须显式传入
schemaName参数,值为缓存绑定的schema名称,否则默认不会查询PUBLICschema下的表。
- JDBC/DBeaver侧:2.11版本JDBC连接默认不会自动扫描所有schema,需要在连接URL末尾追加参数
SQL on-heap缓存配置检查
2.10+版本新增sqlOnheapCacheEnabled配置项,若你开启了该配置但KV写入数据时未同步触发SQL缓存更新,会出现KV能查到数据但SQL查询返回空的问题,可以临时关闭该配置验证查询是否恢复正常。SQL权限校验配置
2.11版本默认开启了更严格的SQL权限管控,若集群启用了安全认证模块,需要给当前操作账号授予对应schema和表的SELECT权限,否则查询不会抛出权限异常但会直接返回空结果。
内容的提问来源于stack exchange,提问作者tech2avinash

