在cassandra中使用Order by子句

时间:2014-01-29 10:05:01

标签: cassandra cassandra-2.0 cql datastax

在cassandra中创建表时,我们可以给出如下所示的聚类键。

Create table user(partitionkey int, id int, name varchar, age int, address text, 
   insrt_ts timestamp,
 Primary key(partitionkey, name, insrt_ts, id)
 with clustering order by (name asc, insrt_ts desc, id asc);

当我们将数据插入该表时,根据cassandra文档记录基于聚类键进行排序。

当我使用CQL1和CQL2检索记录时,我的排序顺序相同。

CQL1:

Select * from user where partitionkey=101;

CQL2:

Select * from user where partitionkey=101 order by name, insrt desc, id;

CQL1和CQL2有什么区别?

1 个答案:

答案 0 :(得分:6)

DataStax建议使用面向查询的数据建模方法,其中结果按查询时所需的顺序存储。此顺序由[复合]主键的分区键和第一个聚类列确定。 DataStax doc on the ORDER BY clause解释了这一点:

  

查询复合主键和排序结果ORDER BY子句   只能选择一列。那一栏必须是第二栏   复合PRIMARY KEY中的列。这也适用于表格   主键中有两个以上的列组件。订购即可   以升序或降序完成,默认升序,和   使用ASC或DESC关键字指定。

     

在ORDER BY子句中,请参阅   使用实际名称而不是别名的列。

     

例如,设置   播放列表表格,它使用复合主键,插入   示例数据,并使用此查询获取有关特定信息的信息   播放列表,按song_order排序。从Cassandra 1.2开始,你不需要   在select表达式中包含ORDER BY列。

所以基本上你只能通过要求ASCending或DESCending命令改变它。

您还可以在DataStax Ac*ademy查看使用Apache Cassandra在线课程的(免费)Java开发。我认为第3节提供了ORDER BY条款的模块。