2014-05-22 30 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