这是我正在创建的表格,该表格包含有关上次世界杯比赛的球员的信息。
CREATE TABLE players (
group text, equipt text, number int, position text, name text,
day int, month int, year int,
club text, liga text, capitan text,
PRIMARY key (name, day, month, year));
在执行以下查询时:
从选拔队的最老的球员中获得5个名字
这是我的查询:
SELECT name FROM players WHERE captain='YES' ORDER BY year DESC LIMIT 5;
我收到此错误:
仅当分区键受EQ或IN限制时才支持Order By
我认为正在创建的表存在问题,但我不知道如何解决。
谢谢。
最佳答案
您要运行的查询的表定义不正确。
您已经定义了一个表,该表具有分区键“名称”,群集列“天”,“月”,“年”以及其他各个列。
在Cassandra中,所有SELECT查询都必须使用EQ或IN指定分区键。您可以使用SQL中常用的等式和不等式运算符来包括部分或全部群集列。
聚类列必须按其定义顺序包括在内。同样,ORDER BY子句只能按定义的顺序包含尚未由EQ特定的聚簇列。
例如,您可以编写查询
select * from players where name = 'fiticida' and day < 5 order by month desc;
要么
select * from players where name = 'fiticida' and day = 10 and month > 2 order by month asc;
但不是
select * from players where name = 'fiticida' and year = 2017;
其中不包括“天”或“月”
并不是
select * from players where name = 'fiticida' and day = 5 order by year desc;
其中不包括“月”。
Here是有关SELECT查询的官方文档。
为了满足您的查询,表需要
由EQ或IN指定的分区键:“ captain”将起作用
使用最左侧的群集列的ORDER BY子句:在主键定义的“月”和“天”的左侧放置“年”
关于select - Cassandra错误-仅当分区键受EQ或IN限制时才支持“排序依据”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46921455/