对 Cassandra 查询输出数据进行排序
Sorting Cassandra Query Output Data
我相信这是 Cassandra 最常见的问题。
尽管如此:
我有这个例子table:
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 列中的所有条目及其相应的“年龄”。
例如:
select b, (toUnixTimestamp(d) - toUnixTimestamp(c))/1000/60/60/24/365.25 as age from test.test1 where a = 'x' and c > -2208981600000 order by 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 首先按第一个聚类列对数据进行排序,然后按第二个在其中排序,依此类推(请参阅此 )。
所以现在唯一的解决方法是在客户端获取所有数据并排序。
我相信这是 Cassandra 最常见的问题。 尽管如此:
我有这个例子table:
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 列中的所有条目及其相应的“年龄”。
例如:
select b, (toUnixTimestamp(d) - toUnixTimestamp(c))/1000/60/60/24/365.25 as age from test.test1 where a = 'x' and c > -2208981600000 order by 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 首先按第一个聚类列对数据进行排序,然后按第二个在其中排序,依此类推(请参阅此
所以现在唯一的解决方法是在客户端获取所有数据并排序。