2014-01-29 93 views
6

在cassandra中創建表時,我們可以按照下面的順序給出聚類鍵。在cassandra中使用order by子句

Create table user(partitionkey int, id int, name varchar, age int, address text, 
    insrt_ts timestamp, 
Primary key(partitionkey, name, insrt_ts, id) 
with clustering order by (name asc, insrt_ts desc, id asc); 

當我們將數據插入到該表中時,根據cassandra文檔記錄根據集羣鍵進行排序。

當我用CQL1和CQL2檢索記錄時,我得到了相同的排序順序。

CQL1:

Select * from user where partitionkey=101; 

CQL2:

Select * from user where partitionkey=101 order by name, insrt desc, id; 

是什麼CQL1和CQL2之間的區別?

+0

您的羣集列與您的CQL2語句中的ORDER BY相同。爲什麼你會期望結果在兩個陳述之間有不同的排序? – Aaron

+0

因此,如果我們希望按聚類鍵順序排列值,則沒有提及order by子句的用法。當我用不同的順序查詢記錄時,我得到一個錯誤。我可以知道用上面的集羣密鑰可以做什麼嗎? – suresh

回答

6

DataStax推薦了一種面向查詢的數據建模方法,其中結果以查詢時所需的順序存儲。此順序由[化合物]主鍵的分區鍵和第一個聚簇列決定。所述DataStax doc on the ORDER BY clause解釋這樣的:

查詢化合物主鍵和排序結果ORDER BY子句 只能選擇單個列。該列必須是複合PRIMARY KEY中的第二個 列。這也適用於 主鍵中有兩個以上的列組件。訂購可以是 按升序或降序完成,默認升序,以及用ASC或DESC關鍵字指定的 。

在ORDER BY子句中,將 指定爲使用實際名稱的列,而不是別名。

例如,設置 了播放列表的表,其使用的化合物的主鍵,插入 示例性數據,並使用這個查詢來獲取關於特定 播放清單由song_order有序信息。從Cassandra 1.2開始,您不需要 在選擇表達式中包含ORDER BY列。

所以基本上你只能通過詢問ASCending或DESCending命令來改變它。

您也可以使用Apache Cassandra在線課程DataStax Ac*ademy查看(免費)Java開發。我相信會話3在ORDER BY條款中提供了一個模塊。

+1

因此,查詢按照我們在創建表時定義集羣鍵的方式進行排序。如果我們想要顛倒這個順序,那麼只有那個時候我們必須按照desc的順序給出順序。感謝您的解釋。 – suresh