【问题标题】:Cassandra error - Order By only supported when partition key is restricted by EQ or INCassandra 错误 - 仅当分区键受 EQ 或 IN 限制时才支持 Order By
【发布时间】:2018-04-05 21:30:28
【问题描述】:

这是我正在创建的表格,该表格包含有关参加过上届世界杯​​的球员的信息。

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 限制时才支持排序方式

我认为是我正在创建的表的问题,但我不知道如何解决。

谢谢。

【问题讨论】:

    标签: select cassandra sql-order-by cql


    【解决方案1】:

    对于您尝试运行的查询,您的表定义不正确。

    您已经定义了一个表,其中包含分区键“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;
    

    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 子句:在主键定义中将“年”放在“月”和“日”的左侧

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 2019-08-01
      • 2015-02-10
      • 2018-11-06
      • 2016-03-29
      • 2012-10-28
      • 2017-10-01
      • 2017-09-25
      相关资源
      最近更新 更多