在cassandra中使用Order by子句

sur*_*esh 6 cql cassandra datastax cassandra-2.0

在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);
Run Code Online (Sandbox Code Playgroud)

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

当我使用CQL1和CQL2检索记录时,我得到的是相同的排序顺序.

CQL1:

Select * from user where partitionkey=101;
Run Code Online (Sandbox Code Playgroud)

CQL2:

Select * from user where partitionkey=101 order by name, insrt desc, id;
Run Code Online (Sandbox Code Playgroud)

CQL1和CQL2有什么区别?

Aar*_*ron 6

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

查询复合主键和排序结果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条款的模块.