2014-05-22 34 views
1

cassandra2.0.7 CQL 3.1.1訂購,目前僅支持PRIMARY KEY

CREATE TABLE playlists (
    id uuid, 
    song_order int, 
    song_id uuid, 
    title text, 
    album text, 
    artist text, 
    PRIMARY KEY (id, song_order)); 


INSERT INTO playlists (id, song_order, song_id, title, artist, album) 
    VALUES (62c36092-82a1-3a00-93d1-46196ee77204, 1, 
    a3e64f8f-bd44-4f28-b8d9-6938726e34d4, 'La Grange', 'ZZ Top', 'Tres Hombres'); 

INSERT INTO playlists (id, song_order, song_id, title, artist, album) 
    VALUES (62c36092-82a1-3a00-93d1-46196ee77204, 2, 
    8a172618-b121-4136-bb10-f665cfc469eb, 'Moving in Stereo', 'Fu Manchu', 'We Must Obey'); 

INSERT INTO playlists (id, song_order, song_id, title, artist, album) 
    VALUES (62c36092-82a1-3a00-93d1-46196ee77204, 3, 
    2b09185b-fb5a-4734-9b56-49077de9edbf, 'Outside Woman Blues', 'Back Door Slam', 'Roll Away'); 


    SELECT * FROM playlists WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 
    ORDER BY song_order DESC LIMIT 2; 

error: Order by is currently only supported on the clustered columns 
    of the PRIMARY KEY, got song_order 

此演示從羣集列:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/select_r.html

誰可以告訴我爲什麼嗎? 謝謝!

+0

你確定你創建的表是否正確?我只是嘗試了最新的2.x的分支和所有工作得很好。仔細檢查你的主鍵,如果你放錯了一個右括號,那麼你可能會有一個複合分區鍵((id,song_order))而不是((id),song_order) –

回答

1

當你創建你的表試試這個。

CREATE TABLE playlists ( 
    id uuid, song_order int, song_id uuid, title text, album text, artist text, 
    PRIMARY KEY (id, song_order)) WITH CLUSTERING ORDER BY (song_order ASC); 
+1

是的,它會工作,但它不回答他的問題「爲什麼?」 – Aaron

+0

爲什麼它會奏效的原因是,你告訴卡桑德拉存儲聚集鍵,以便當數據被寫入到SSTables。否則,責令不能保證,在卡桑德拉查詢將是非常低效的。 –

+0

集羣秩序是好老「列」。 – Nick