2017-08-25 73 views
0

选择为了创建表,因为这卡桑德拉通过

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进行选择查询。我如何实现这一目标?谢谢

回答

1

您可以简单地使用ORDER BY TS ASC

例子:

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

如果你这样做选择

SELECT * FROM放哪儿数据= 1,TID = 2由ts asc命令;

你将结束与一些错误

InvalidRequest:错误从服务器:代码= 2200 [无效查询]消息=“订单由目前只支持列的顺序在PRIMARY KEY他们声明的顺序如下“

我测试对我的本地卡桑德拉分贝 我会suggets改变主键列

的原因的顺序是: “查询复合主键和排序结果ORDER BY子句只能选择一个列。该列必须是在化合物PRIMARY KEY的第二列。”

CREATE TABLE DATA2( 做INT, TID INT, TS时间戳, AVAL文本, DVAL小数, PRIMARY KEY(那样, TS,TID) )聚类ORDER BY(TS DESC,TID ASC)

现在我们可以自由选择订购的TS

卡桑德拉@ cqlsh类型:航空公司> SELECT * FROM数据2 WHERE = 1和ts = 2由ts DESC命令;

did | ts | tid | aval | (0行) cassandra @ cqlsh:airline> SELECT * FROM data2 WHERE = 1和ts = 2 order by ts ASC;

did | ts | tid | aval | DVAL ----- + ---- + ----- + + ------ ------

(0行)

另一种方式是要么创建一个新表或物化视图,后面会导致幕后数据重复 希望能够足够清晰