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. 如果ORDER BY,使用时使用该子句的目的是什么SELECT
  3. 如果没有,我如何让返回行按聚类键排序,因为 cql 不允许ORDER BYa select *
4

1 回答 1

10

您的聚类列定义了顺序(在您的情况agescore

http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt

在给定的物理节点上,给定分区键的行以集群列的顺序存储,使得以该集群顺序检索行特别有效(请参阅 SELECT)。

http://cassandra.apache.org/doc/cql3/CQL.html#selectStmt

ORDER BY 选项允许选择返回结果的顺序。它将列名列表以及列的顺序作为参数(ASC 表示上升,DESC 表示后代,省略与 ASC 等效的顺序)。目前可能的排序是有限的(这取决于表 CLUSTERING ORDER):

  • 如果在没有任何特定 CLUSTERING ORDER 的情况下定义了表,则允许的排序是由集群列引起的顺序和该顺序的倒数。
  • 否则,允许的顺序是 CLUSTERING ORDER 选项的顺序和相反的顺序。
于 2014-02-22T03:28:15.600 回答