我创建了表
CREATE TABLE testtab (
testtabmainid bigint,
testtabid timeuuid,
posteddate timestamp,
description text,
year bigint,
month bigint,
day bigint,
PRIMARY KEY ((year,month,day),posteddate,testtabmainid)
) WITH CLUSTERING ORDER BY (posteddate DESC,testtabmainid desc);
然后继续
SELECT testtabmainid,posteddate,year,month, day FROM testtab;
我得到了这样的结果
最后一行没有排序。我需要顶部的最后一行(testtabmainid =91)
我需要以 desc 方式在 testtabmainid 中对表进行排序
最佳答案
您在未指定任何 WHERE
子句的情况下进行了查询。这将生成由应用于分区键数据的 TOKEN
函数排序的结果。
为了满足您的查询,您首先需要将表定义更改为:
CREATE TABLE testtab (
testtabmainid bigint,
testtabid timeuuid,
posteddate timestamp,
description text,
year bigint,
month bigint,
day bigint,
PRIMARY KEY ((year,month,day),testtabmainid,posteddate)
) WITH CLUSTERING ORDER BY (testtabmainid desc,posteddate DESC);
然后将您的查询更改为:
SELECT testtabmainid,posteddate,year,month, day
FROM testtab
WHERE year=2016 AND
month=12 AND
day=1;
关键是数据是由
CLUSTERING KEY
排序的,只有 在 分区内,这就是为什么您需要使用 WHERE
子句过滤查询以获取您的订单。如果您想保留posteddata DESC 顺序,您需要创建另一个表(您已经拥有的那个表很好)并插入/更新两个表。
关于cassandra结果中的排序顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40906913/