【问题标题】:Use of Order by clause in cassandra在 cassandra 中使用 Order by 子句
【发布时间】:2014-02-21 01:22:39
【问题描述】:

在 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 有什么区别?

【问题讨论】:

  • 您的聚类列与 CQL2 语句中的 ORDER BY 相同。为什么您希望两个语句之间的结果排序不同?
  • 因此,如果我们想要聚类键顺序中的值,则没有必要提及 order by 子句。当我查询具有不同顺序的记录时,出现错误。我可以知道我可以用上面的集群键做什么其他排序吗?

标签: cassandra cql cassandra-2.0


【解决方案1】:

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

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

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

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

所以基本上你只能通过要求 ASCending 或 DESCending 顺序来改变它。

您可能还想查看DataStax Ac*ademy 上的(免费)使用 Apache Cassandra 进行 Java 开发在线课程。我相信第 3 节提供了一个关于 ORDER BY 子句的模块。

编辑 2019

对于所有未来的 Google 员工,我在这篇文章发布大约一年后写了一篇关于这个主题的文章。它现在更老了,但仍然与 Cassandra 的结果集排序相关:https://www.datastax.com/dev/blog/we-shall-have-order

【讨论】:

  • 所以查询是按照我们在创建表时定义集群键的方式排序的。如果我们想颠倒顺序,只有那个时候我们必须用 desc 给 order by 子句。谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 2016-06-12
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 2013-11-10
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多