如何使cassandra结果以分页结果的日期(时间戳)排序方式?

时间:2016-11-25 13:46:40

标签: cassandra datastax

我创建了包含以下字段的表

CREATE TABLE snwv2jobs.testtab (
  testtabid bigint,  
  posteddate timestamp,
  description text,   
  year bigint,
  PRIMARY KEY ((testtabid,year),posteddate)
) WITH CLUSTERING ORDER BY (posteddate DESC)

但在检索数据时,结果显示:

testtabid - 35
posteddate - 2016-11-25 17:40:29 + 0530 -2016年

testtabid - 36
posteddate - 2016-11-25 17:40:31 + 0530 -2016年

testtabid - 34
posteddate - 2016-11-25 17:40:25 + 0530 -2016年

testtabid - 37
posteddate - 2016-11-25 17:40:34 + 0530 -2016年

testtabid - 38
posteddate - 2016-11-25 17:40:37 + 0530 -2016年

我需要这样的结果:

testtabid - 38
posteddate - 2016-11-25 17:40:37 + 0530 -2016年

testtabid - 37
posteddate - 2016-11-25 17:40:34 + 0530 -2016年

testtabid - 36
posteddate - 2016-11-25 17:40:31 + 0530 -2016年

testtabid - 35
posteddate - 2016-11-25 17:40:29 + 0530 -2016年

testtabid - 34
posteddate - 2016-11-25 17:40:25 + 0530 -2016年

1 个答案:

答案 0 :(得分:0)

如果您希望一年中的所有数据按postsdate排序,则以下是架构

CREATE TABLE snwv2jobs.testtab (
  testtabid bigint,  
  posteddate timestamp,
  description text,   
  year bigint,
  PRIMARY KEY ((year),posteddate, testtabid)
) WITH CLUSTERING ORDER BY (posteddate DESC, testtabid DESC)

上述架构存在问题如果您在一年内生成了大量数据。所有数据都将转到同一个分区。

因此您需要在分区键中添加月份和星期。所以这里的模式将对一周内的所有数据进行排序

CREATE TABLE snwv2jobs.testtab (
  testtabid bigint,  
  posteddate timestamp,
  description text,   
  year int,
  month int,
  week int,
  PRIMARY KEY ((year,month,week),posteddate, testtabid)
) WITH CLUSTERING ORDER BY (posteddate DESC, testtabid DESC)

如果数据较少,则可以从分区键中删除一周,或者如果您在一天内生成大量数据,则可以在分区键中添加一天而不是一周。