这是我正在创建的表格,该表格包含有关上次世界杯比赛的球员的信息。

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/

10-10 07:10