Cassandra CQL选择排序

7
如果我使用cql定义一个表格,就像这样:
CREATE TABLE scores (
 name text,
 age int,
 score int,
 date timestamp,
 PRIMARY KEY (name, age, score)
);

在cqlsh中执行SELECT查询语句,像这样:

select * from mykeyspace.scores;

显示的结果似乎总是按照“年龄”和“分数”的升序自动排序,而不考虑输入数据的顺序(如预期的那样,返回的行不会按照分区键“名称”排序)。 我有以下问题:
  1. SELECT 是否会自动按簇键对返回行进行排序?
  2. 如果是,使用 SELECT 时使用 ORDER BY 子句的目的是什么?
  3. 如果不是,由于 cql 不允许在 select * 上使用 ORDER BY,我该如何使返回行按簇键排序?
1个回答

10
您的聚类列定义了顺序(在您的情况下是age然后是score)。在给定物理节点上,给定分区键的行按照聚类列引起的顺序存储,使得在该聚类顺序中检索行特别高效(请参见SELECT)。
ORDER BY选项允许选择返回结果的顺序。它以列名列表及其列的排序方式为参数(升序为ASC,降序为DESC,省略排序相当于ASC)。当前可用的排序方式受限于表的CLUSTERING ORDER:
- 如果表未定义任何特定的CLUSTERING ORDER,则允许的排序是由聚类列引起的顺序和其反向顺序。 - 否则,允许的排序是由CLUSTERING ORDER选项的顺序和其反向顺序。
链接: - 创建表语句:http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt - SELECT 语句:http://cassandra.apache.org/doc/cql3/CQL.html#selectStmt

2
Mikhail,我已经阅读了那些文件。它们并没有真正回答我的问题。鉴于我如何定义我的表,排序是否自动进行?如果是,为什么我仍需要在SELECT语句中使用ORDER BY子句(我猜如果我需要按降序排序仍需要)? - ptmoy2
2
是的,排序是“自动”的。您的数据在物理上以排序顺序存储,该顺序由我们的聚簇列或 CLUSTERING ORDER(如果存在)定义。ORDER BY 允许您在 ASC 和 DESC 之间切换。 - Mikhail Stepura
1
谢谢Mikhail。所以由于数据已经自动按升序排序,除非我想要按降序排序,否则在SELECT中没有使用ORDER BY的必要 - 对吗? - ptmoy2
数据按照您定义的顺序存储,并且使用ORDER BY只能反转该顺序。 - Mikhail Stepura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接