Cassandra 聚类键顺序
Cassandra clustering key order
所以我有一个 table 看起来像:
CREATE TABLE schema.table (
partitionkey int,
clusterkey text,
value bigint,
PRIMARY KEY ((partitionkey), clusterkey)
);
我们依靠这个 table 来按 clusterkey
正确排序以进行分页。
问题是:当从 cassandra 返回结果时,看起来它们是根据 ASCII 值而不是逻辑 A-Z 排序排序的。 - 对于查看它的人来说,这在编程上是有意义的,但在逻辑上是不合理的。
所以查询:
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
我知道我们可以将数据更改为全部小写/大写以正确排序,但这会改变数据的外观。 - 这绝对不是想要的。
是否有更改当前聚类顺序方法的选项?
- 或者另一种逻辑排序方式?
不,除了使聚类列 lower/upper-cased 之外,没有办法使其排序不区分大小写。如果您关心数据的外观,您始终可以在附加列中保留未修改的文本(是的,它会复制数据),并将其显示给用户,而不是这个聚类列。
聚类列按字典顺序排序,这意味着大写字符优先于小写字符。
Cassandra 在当前版本中不支持不区分大小写的排序,但 Cassandra 社区要求进行增强 Provide a locale/collation-aware text comparator 到目前为止,开发者社区并未对此给予太多关注。
所以我有一个 table 看起来像:
CREATE TABLE schema.table (
partitionkey int,
clusterkey text,
value bigint,
PRIMARY KEY ((partitionkey), clusterkey)
);
我们依靠这个 table 来按 clusterkey
正确排序以进行分页。
问题是:当从 cassandra 返回结果时,看起来它们是根据 ASCII 值而不是逻辑 A-Z 排序排序的。 - 对于查看它的人来说,这在编程上是有意义的,但在逻辑上是不合理的。
所以查询:
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
我知道我们可以将数据更改为全部小写/大写以正确排序,但这会改变数据的外观。 - 这绝对不是想要的。
是否有更改当前聚类顺序方法的选项?
- 或者另一种逻辑排序方式?
不,除了使聚类列 lower/upper-cased 之外,没有办法使其排序不区分大小写。如果您关心数据的外观,您始终可以在附加列中保留未修改的文本(是的,它会复制数据),并将其显示给用户,而不是这个聚类列。
聚类列按字典顺序排序,这意味着大写字符优先于小写字符。
Cassandra 在当前版本中不支持不区分大小写的排序,但 Cassandra 社区要求进行增强 Provide a locale/collation-aware text comparator 到目前为止,开发者社区并未对此给予太多关注。