Cassandra 错误 - 仅当分区键受 EQ 或 IN 限制时才支持 Order By
Cassandra error - Order By only supported when partition key is restricted by EQ or IN
这是我正在创建的 table,这个 table 包含有关参加上次世界大赛的球员的信息。
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));
执行以下查询时:
Obtain 5 names from the oldest players that were captain of the selection team
这是我的查询:
SELECT name FROM players WHERE captain='YES' ORDER BY year DESC LIMIT 5;
我收到这个错误:
Order By only supported when partition key is restricted by EQ or IN
我认为是关于我正在创建的 table 的问题,但我不知道如何解决它。
谢谢。
您的 table 定义对于您尝试 运行 的查询不正确。
您已经使用分区键 "name"、集群列 "day"、"month"、"year" 和各种其他列定义了 table。
在 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;
不包括 "day" 或 "month"
而不是
select * from players where name = 'fiticida' and day = 5 order by year desc;
不包括 "month"。
Here 是关于 SELECT 查询的官方文档。
为了满足您的查询,table 需要
- 由 EQ 或 IN 指定的分区键:"captain" 将起作用
- 使用最左边聚类列的 ORDER BY 子句:将 "year" 放在主键定义 "month" 和 "day" 的左侧
这是我正在创建的 table,这个 table 包含有关参加上次世界大赛的球员的信息。
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));
执行以下查询时:
Obtain 5 names from the oldest players that were captain of the selection team
这是我的查询:
SELECT name FROM players WHERE captain='YES' ORDER BY year DESC LIMIT 5;
我收到这个错误:
Order By only supported when partition key is restricted by EQ or IN
我认为是关于我正在创建的 table 的问题,但我不知道如何解决它。
谢谢。
您的 table 定义对于您尝试 运行 的查询不正确。
您已经使用分区键 "name"、集群列 "day"、"month"、"year" 和各种其他列定义了 table。
在 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;
不包括 "day" 或 "month"
而不是
select * from players where name = 'fiticida' and day = 5 order by year desc;
不包括 "month"。
Here 是关于 SELECT 查询的官方文档。
为了满足您的查询,table 需要
- 由 EQ 或 IN 指定的分区键:"captain" 将起作用
- 使用最左边聚类列的 ORDER BY 子句:将 "year" 放在主键定义 "month" 和 "day" 的左侧