Sorting 排序Cassandra查询输出数据

Sorting 排序Cassandra查询输出数据,sorting,cassandra,output,primary-key,Sorting,Cassandra,Output,Primary Key,我相信这是卡桑德拉最常见的问题。 然而: 我有一个示例表: CREATE TABLE test.test1 ( a text, b text, c timestamp, id uuid, d timestamp, e decimal, PRIMARY KEY ((a),c, b, id)) WITH CLUSTERING ORDER BY (b ASC, compartment ASC); 我的问题是: select b, (toUnixTimestamp(d) - toUnixTimesta

我相信这是卡桑德拉最常见的问题。 然而:

我有一个示例表:

CREATE TABLE test.test1 (
a text,
b text,
c timestamp,
id uuid,
d timestamp,
e decimal,
PRIMARY KEY ((a),c, b, id)) WITH CLUSTERING ORDER BY (b ASC, compartment ASC);
我的问题是:

select b, (toUnixTimestamp(d) - toUnixTimestamp(c))/1000/60/60/24/365.25 as age from test.test1  where a = 'x' and c > -2208981600000 ;
这很好,但是我不能得到按我需要的b列排序的数据。我需要b列中的所有条目及其相应的“年龄”

例如:

给出了错误:

InvalidRequest: Error from server: code=2200 [Invalid query] message="Order by currently only supports the ordering of columns following their declared order in the PRIMARY KEY"
我在集群列中尝试了不同的顺序,在分区键中尝试了不同的选项,但我被一些逻辑所吸引,似乎无法智取Cassandra来获得我想要的。如果我得到了我想要的排序顺序,我就失去了对列“c”进行过滤的能力


是否有一些逻辑我没有在这里应用,或者,我必须省略什么(?)才能获得b列中具有相应年龄的条目列表。

简短回答-不可能使用CQL对任意列上的数据进行排序,即使它是主键的一部分。Cassandra首先按第一个聚类列对数据进行排序,然后按第二个聚类列对数据进行排序,以此类推


因此,目前唯一的解决办法是在客户端获取所有数据并进行排序。

谢谢@alex ott。坚持既定规则是答案。随着我了解更多,我将能够做更多。我建议抓取这本免费的书:谢谢你的链接。
InvalidRequest: Error from server: code=2200 [Invalid query] message="Order by currently only supports the ordering of columns following their declared order in the PRIMARY KEY"