2017-08-25 104 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行)

另一種方式是要麼創建一個新表或物化視圖,後面會導致幕後數據重複 希望能夠足夠清晰