Cassandra错误 - 仅当分区键受EQ或IN限制时才支持

fit*_*ida 10 select cql sql-order-by cassandra

这是我正在创建的表格,此表包含有关玩最后一个杯子的玩家的信息.

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));
Run Code Online (Sandbox Code Playgroud)

执行以下查询时:

从作为选拔队队长的最老的球员那里获得5个名字

这是我的查询:

SELECT name FROM players WHERE captain='YES' ORDER BY year DESC LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

仅当分区键受EQ或IN限制时才支持

我认为这是我正在创建的表的一个问题,但我不知道如何解决它.

谢谢.

pco*_*ley 11

您正在尝试运行的查询的表定义不正确.

您已经定义了一个包含分区键"name"的表,聚类列"day","month","year"和其他各种列.

在Cassandra中,所有SELECT查询都必须使用EQ或IN指定分区键.您可以使用SQL中习惯的等式和不等式运算符来包含部分或全部集群列.

群集列必须按其定义的顺序包含在内.ORDER BY子句只能按照定义的顺序包括尚未由EQ特定的聚类列.

例如,您可以编写查询

select * from players where name = 'fiticida' and day < 5 order by month desc;
Run Code Online (Sandbox Code Playgroud)

要么

select * from players where name = 'fiticida' and day = 10 and month > 2 order by month asc;
Run Code Online (Sandbox Code Playgroud)

但不是

select * from players where name = 'fiticida' and year = 2017;
Run Code Online (Sandbox Code Playgroud)

不包括"日"或"月"

并不是

select * from players where name = 'fiticida' and day = 5 order by year desc;
Run Code Online (Sandbox Code Playgroud)

不包括"月".

是SELECT查询的官方文档.


为了满足您的查询,表需要

  • 由EQ或IN指定的分区键:"captain"将起作用
  • 使用最左边的聚类列的ORDER BY子句:在主键定义中将"year"放在"month"和"day"的左侧