问题
I created table
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);
then on
SELECT testtabmainid,posteddate,year,month, day FROM testtab;
i got result like this
testtabmainid / posteddate / year / month / day
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
the last row is not in sorted order. I need the last row (testtabmainid =91 ) on the top
i need to sort table in testtabmainid in desc manner
回答1:
You queried without specifying any WHERE clause. This produces results ordered by the TOKEN function applied to your partition key data.
In order to satisfy your query you need to change first of all the table definition to:
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);
and then change your query to:
SELECT testtabmainid,posteddate,year,month, day
FROM testtab
WHERE year=2016 AND
month=12 AND
day=1;
The key point is that data is ordered by your CLUSTERING KEY only inside a partition, and that's why you need to filter your queries with a WHERE clause to obtain your order.
If you want to keep the posteddata DESC order, you'll need to create another table (the one you already have is fine) and insert/update both tables.
来源:https://stackoverflow.com/questions/40906913/sorting-order-in-cassandra-result