卡桑德拉选择顺序

时间:2017-08-25 03:05:40

标签: cassandra cql

我创建表格

CREATE TABLE sm.data (
    did int,
    tid int,
    ts timestamp,
    aval text,
    dval decimal,
    PRIMARY KEY (did, tid, ts)
) WITH CLUSTERING ORDER BY (tid ASC, ts DESC);

在我使用ts DESC进行所有选择查询之前,所以它很好。现在我还需要在某些情况下使用ts ASC进行选择查询。我该如何做到这一点?谢谢

2 个答案:

答案 0 :(得分:1)

您只需使用ORDER BY ts ASC

即可

示例:

SELECT * FROM data WHERE did = ? and tid = ? ORDER BY ts ASC

答案 1 :(得分:0)

如果你这样做,请选择

从数据中选择*,其中did = 1且tid = 2,按ts asc排序;

你最终会遇到一些错误

InvalidRequest:来自服务器的错误:代码= 2200 [无效查询]消息=&#34;目前订单仅支持在PRIMARY KEY&#34; <中声明的订单后的列的排序/ p>

我已经对我当地的cassandra db进行了测试 我想改变主键列的顺序

原因是: &#34;查询复合主键和排序结果ORDER BY子句只能选择一列。该列必须是复合PRIMARY KEY中的第二列。&#34;

CREATE TABLE data2(     做了int,     tid int,     ts时间戳,     aval文本,     小数十进制,     主要关键(做,ts,tid) )具有聚集顺序(ts DESC,tid ASC)

现在我们可以自由选择TS的排序类型

卡桑德拉@ cqlsh:航空公司&GT; SELECT * FROM data2 WHERE做了= 1,ts = 2顺序由ts DESC;

做了| ts | tid | aval | DVAL ----- + ---- + ----- + + ------ ------

(0行) 卡桑德拉@ cqlsh:航空公司&GT; SELECT * FROM data2 WHERE做了= 1而ts = 2按ts ASC排序;

做了| ts | tid | aval | DVAL ----- + ---- + ----- + + ------ ------

(0行)

另一种方法是创建一个新表或一个物化视图,后者将导致场景背后的数据重复 希望足够清楚