2014-02-22 170 views
7

如果我定義一個表像這樣使用定製列表:在cqlsh卡桑德拉CQL選擇排序

CREATE TABLE scores (
name text, 
age int, 
score int, 
date timestamp, 
PRIMARY KEY (name, age, score) 
); 

,做一個選擇是這樣的:

select * from mykeyspace.scores; 

顯示的結果似乎總是排序「年齡',然後'升序'自動按升序排列,無論輸入數據排序如何(如預期的那樣,返回行不按分區鍵'名稱'排序)。我有以下問題:

  1. SELECT是否自動按集羣鍵對返回行進行排序?
  2. 如果,使用SELECT時使用ORDER BY子句的目的是什麼?
  3. 如果,我怎樣才能得到返回的行按聚類鍵排序,因爲cql不允許ORDER BYselect *

回答

10

你的集羣列定義的順序(在你的情況age然後score

http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt

在給定的物理節點,對於一個給定的分區鍵行存儲在由產生的順序,聚類列,以該聚類順序對行進行檢索特別有效(請參閱SELECT)。

http://cassandra.apache.org/doc/cql3/CQL.html#selectStmt

的ORDER BY選項允許選擇返回結果的順序。它將參數列作爲列名以及列的順序(ASC爲升序,DESC爲後代,省略了與ASC等同的命令)。目前可能的順序是有限的(這取決於表聚類ORDER):

  • 如果表已經沒有任何特定聚類ORDER定義,則所允許的排序是由聚類列和倒檔產生的順序那個。
  • 否則,允許的排序是CLUSTERING ORDER選項的順序和相反順序。
+2

米哈伊爾,我已經閱讀過這些文件。他們沒有真正回答我的問題。鑑於我如何定義我的表格,排序是否自動?如果是,爲什麼我仍然需要SELECT語句中的ORDER BY子句(如果我需要按降序排序,我想我仍然需要它)? – ptmoy2

+2

是的,排序是「自動」。您的數據以物理方式存儲在排序順序中,由我們的聚類列或y CLUSTERING ORDER(如果存在)定義。 ORDER BY允許您在ASC和DESC之間切換 –

+1

感謝Mikhail。因此,既然數據已經自動按升序排序,那麼除非我想按降序排序 - 正確嗎?在SELECT中使用ORDER BY是沒有道理的。 – ptmoy2