您只能在集群键上指定集群顺序。
PRIMARY KEY (lastname, userID)
)WITH CLUSTERING ORDER BY (lastname desc);
在第一个示例中,唯一的聚类键是userID
。因此,它是唯一有效的条目CLUSTERING ORDER BY
.
PRIMARY KEY (lastname, userID)
)WITH CLUSTERING ORDER BY (lastname desc, userID asc);
第二个示例失败,因为您在中指定分区键CLUSTERING ORDER BY
,这也行不通。
Cassandra 的工作原理是根据集群键对 CQL 行进行排序,但前提是指定了分区键。这是因为 Cassandra 宽行建模的整体思想是通过分区键进行查询,并在一个查询操作中读取一系列有序的行。
我想以“SELECT .... FROM user WHERE ... ORDER BY lastname”的形式运行查询。
鉴于此声明,我建议您在此模型中需要另一列,然后它才能按您想要的方式工作。你需要的是一个合适的分区键 http://www.datastax.com/documentation/cql/3.1/share/glossary/gloss_partition_key.html为您users
桌子。说...像group
。您的用户按以下划分group
,并聚类为lastname
,你的定义看起来像这样:
CREATE TABLE test.usersbygroup (
userID timeuuid,
firstname varchar,
lastname varchar,
group text,
PRIMARY KEY (group,lastname)
)WITH CLUSTERING ORDER BY (lastname desc);
然后,此查询将起作用,返回作为节目“Firefly”粉丝的用户(在本例中),按顺序排序lastname
(降序):
SELECT * FROM usersbygroup WHERE group='Firefly Fans';
通读此 DataStax 文档复合键和聚类 http://www.datastax.com/documentation/cql/3.1/cql/ddl/ddl_compound_keys_c.html以获得更好的理解。
注意:您不需要指定ORDER BY
在你的SELECT
。这些行将按其集群键排序返回,并且ORDER BY
无法改变这一点。全部ORDER BY
真正可以做的是改变排序方向(DESCending 与 ASCending)。