我创建了表

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/

10-14 10:59
查看更多