cassandra结果中的排序顺序

时间:2016-12-01 09:31:55

标签: sorting cassandra datastax cql

我创建了表

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 / 发布日期 / / /

     

90 / 2016-12-01 11:19:11 + 0530 / 2016 / 11 / 30

     

89 / 2016-11-30 16:21:58 + 0530 / 2016 / 11 / 30

     

88 / 2016-11-30 16:13:33 + 0530 / 2016 / 11 / 30

     

91 / 2016-12-01 11:20:42 + 0530 / 2016 / 12 / 1

最后一行未按排序顺序排列。我需要在顶部的最后一行(testtabmainid = 91)

我需要以desc方式对testtabmainid中的表进行排序

1 个答案:

答案 0 :(得分:2)

您在未指定任何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 订单,您需要创建另一个表(您已经拥有的表),并插入/更新两个表。