Cassandra按item_session排序触发code=2200错误问题咨询
Cassandra查询排序报错排查
存在的问题
- 建表语句存在语法缺陷
你提供的建表语句中session_no字段未指定数据类型,Cassandra要求所有字段必须明确声明类型,若实际执行的建表语句存在该问题,会导致表结构异常,后续查询的分区键限制无法被正确识别。 - 查询参数使用错误
你已经在WHERE子句中完整限定了复合分区键(user,session_no)的两个字段的等值条件,完全满足Cassandra ORDER BY的前置要求,不需要加ALLOW FILTERING参数,多余的该参数在部分Cassandra版本中会触发异常校验逻辑,导致报错。 - 可能存在分区键值类型不匹配问题
如果你实际建表时session_no的类型为数值类型(如int、bigint),查询时传入字符串格式的'200'会导致分区键等值匹配不被Cassandra识别为有效限制,从而触发排序报错。
修复方案
- 先修正建表语句,补全
session_no的字段类型,示例如下(可根据业务需求调整session_no的类型):
CREATE TABLE IF NOT EXISTS music1 ( user text, artist text, song_title text, session_no text, item_session text, PRIMARY KEY ((user,session_no),item_session) ) WITH CLUSTERING ORDER BY (item_session ASC);
- 调整查询语句,去掉多余的
ALLOW FILTERING,同时保证session_no的传值类型和表定义一致:
如果session_no为文本类型,查询语句为:
select * from music1 where user = '15' AND session_no = '200' Order by item_session desc;
如果session_no为数值类型,查询语句为:
select * from music1 where user = '15' AND session_no = 200 Order by item_session desc;
内容的提问来源于stack exchange,提问作者Gokul
相关产品推荐
相关产品推荐

