Cassandra 3.11升级至4.1后MAX函数调用出现歧义错误求助
Cassandra 3.11升级至4.1后MAX(timeuuid)查询报错的说明与解决
这不是bug,而是Cassandra 4.x版本对聚合函数的类型匹配逻辑做了更严格的调整。
问题原因
在Cassandra 3.11中,查询解析器会自动推断timeuuid类型字段对应的MAX函数签名;但4.1版本中,由于timeuuid与uuid类型存在兼容性(timeuuid是uuid的子类),当调用MAX(testid)时,解析器无法确定应该匹配针对uuid还是timeuuid的MAX函数签名,因此抛出歧义错误。
解决方法
通过显式类型转换消除函数匹配的歧义,有两种写法可选:
- 使用类型转换运算符
:::
SELECT MAX(testid::timeuuid) FROM test;
- 使用
CAST函数:
SELECT MAX(CAST(testid AS timeuuid)) FROM test;
复现场景回顾
创建表的语句:
CREATE TABLE test (name text, testid timeuuid, primary key((name), testid)) WITH CLUSTERING ORDER BY (testid desc);
执行SELECT MAX(testid) FROM test;时触发错误:
InvalidRequest: Error from server: code=2200 [Invalid query] message="Ambiguous call to function max (can be matched by following signatures: system.max : (uuid) -> uuid, system.max : (timeuuid) -> timeuuid, system.max : (blob) -> blob): use type casts to disambiguate"
内容的提问来源于stack exchange,提问作者Jordi Vermeulen
相关产品推荐
相关产品推荐

