Apache Ignite通过sqlline查询_val、_ver列报错问题咨询
Apache Ignite 2.13.0
_val/_ver列查询问题解答 _ver列相关
- 这个列从Ignite 2.9.0版本开始就被移除了。2.7.0这类旧版本里
_ver是内置隐藏列,存储缓存条目的版本号,供旧版乐观事务、数据一致性校验逻辑使用。后续新版本重构了事务版本实现机制,就不再对外暴露这个字段,你查SYS.TABLE_COLUMNS找不到该字段、直接查询报错都是符合版本逻辑的正常现象。
_val列相关
- 2.8及更早版本确实支持直接查询
_val,不需要手动做类型转换,当时底层会默认将该字段转换为字符串格式返回给客户端。 - 2.9版本后调整了隐藏列的类型映射规则:
_val存储的是缓存条目对应的原生二进制对象(BinaryObject),本身没有绑定固定的SQL类型,sqlline这类走JDBC协议的客户端读到无明确类型的二进制对象时,找不到匹配的序列化处理逻辑,会直接触发语句异常关闭,就会抛出你遇到的Statement is closed错误。 - 你测试的
CAST(_val AS VARCHAR)写法就是新版本下的标准用法:显式指定转换为字符串类型后,Ignite会调用二进制对象的toString()方法生成结构化字符串结果,即可正常返回数据。日常使用如果只需要取业务字段值,直接查询表中定义的显式列即可,比转换字符串解析_val的性能高很多。
内容的提问来源于stack exchange,提问作者enotpolaskun
相关产品推荐
相关产品推荐

