首页 > 解决方案 > Cassandra 集群密钥顺序

问题描述

所以我有一张桌子,看起来像:

CREATE TABLE schema.table (
  partitionkey int,
  clusterkey text,
  value bigint,
  PRIMARY KEY ((partitionkey), clusterkey)
);

我们依靠这个表来按clusterkeyfor分页正确排序。
问题是:当从 cassandra 返回结果时,看起来它们是根据它们的 ASCII 值排序的,而不是逻辑 AZ 排序。- 对于观看它的人来说,这在程序上是有意义的,但在逻辑上是不合理的。

所以一个查询:
SELECT clusterkey FROM schema.table WHERE partitionkey = 1 ORDER BY clusterkey ASC;
得到左边的结果,当我期待右边的结果时

---------(current)---                ----------(wanted)---
          clusterkey                           clusterkey 
---------------------                ---------------------
       Other capital                      a should be top 
     Starts capital1                        Other capital 
     Starts capital2                      Starts capital1 
     Starts capital3                      starts capital1 
     Starts capital4                      Starts capital2 
        YYYYYYYYYYYY                      Starts capital3
        ZZZZZZZZZZZZ                      Starts capital4 
     a should be top                         YYYYYYYYYYYY 
     starts capital1                         ZZZZZZZZZZZZ 
        zzzzzzzzzzzz                         zzzzzzzzzzzz

我知道我们可以将数据更改为全部小写/大写以正确排序,但这会改变数据的外观。- 这绝对是不想要的。

是否可以选择更改当前聚类顺序的方法?
- 或另一种逻辑排序方式?

标签: cassandrasql-order-byclustering-key

解决方案


聚类列按字典顺序排序,这意味着大写字符优先于小写字符。

Cassandra 在当前版本中不支持不区分大小写的排序,但 Cassandra 社区要求增强功能提供一个区域设置/排序感知文本比较器,到目前为止,它并没有得到开发者社区的太多关注。


推荐阅读