Cassandra cql选择排序

ptm*_*oy2 7 cql cassandra cqlsh

如果我使用cql定义这样的表:

CREATE TABLE scores (
 name text,
 age int,
 score int,
 date timestamp,
 PRIMARY KEY (name, age, score)
);
Run Code Online (Sandbox Code Playgroud)

并在cqlsh中执行SELECT,如下所示:

select * from mykeyspace.scores;
Run Code Online (Sandbox Code Playgroud)

显示结果似乎总是被"时代"进行排序,然后按升序"得分"自动无论输入数据排序的(如预期,返回行不被分区键"名"排序).我有以下问题:

  1. 是否SELECT通过群集键自动对返回行进行排序?
  2. 如果,使用该ORDER BY条款的目的什么SELECT
  3. 如果没有,我怎么回行由聚集键进行排序,因为定制列表不允许ORDER BYselect *

Mik*_*ura 10

你的集群列定义的顺序(在你的情况age,然后score)

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选项和反转顺序的顺序.

  • 米哈伊尔,我已经读过那些文件了.他们并没有真正回答我的问题.鉴于我如何定义我的表,是自动排序?如果是,为什么我仍然需要SELECT语句中的ORDER BY子句(我想如果我需要按降序排序,我仍然需要它)? (2认同)
  • 是的,排序是"自动的".您的数据以物理方式存储在排序顺序中,由我们的聚类列或y CLUSTERING ORDER(如果存在)定义.ORDER BY允许您在ASC和DESC之间切换 (2认同)