sorting - 集群顺序不适用于复合分区键

标签 sorting cassandra cassandra-3.0 compound-key

用下面的表定义:

CREATE TABLE device_by_create_date (
    year int,
    comm_nr text,
    created_at timestamp,
    PRIMARY KEY ((year, comm_nr), created_at)
) WITH CLUSTERING ORDER BY (created_at DESC)

Comm_nr 是唯一标识符。

我希望看到按 created_at 列排序的数据,但在我添加数据时并非如此。

示例条目:

表 CQL:

如何发出 select * from table; 查询,返回按 created_at 行排序的数据?

最佳答案

TLDR:您需要创建一个新表。

您的分区键是 (year, comm_nr)。你是 created_at 键是有序的,但它是在该分区键内排序的。 SELECT * FROM table WHERE year=x AND comm_nr=y; 的查询将按 created_at 排序。

此外,如果您的 key 不是 (year, comm_nr), created_at 而不是 year, comm_r, created_at,即使您的创建表语法仅将 created_at 指定为具有聚类顺序,它将被创建为 WITH CLUSTERING ORDER BY (comm_nr DESC, created_at DESC)。数据在 SSTables 中从左到右按键排序。

以真正的 nosql 方式执行此操作的方法是创建一个单独的表,其中您的键是 year, created_at, comm_nr。您可以在创建用户时写信给两者,但如果您需要谁首先创建他们的帐户的答案,您可以改为查询新表。

关于sorting - 集群顺序不适用于复合分区键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034929/

相关文章:

java - Java中如何按多个字段对对象进行排序?

python - 在 Python 中合并 2 个排序列表的有效解决方案

cassandra - 相当于Cassandra中的消费者组

Cassandra 更改主键与触发多个选择查询

cassandra - cassandra 中的分区计数

sorting - 如何使用批处理文件实现快速排序?

arrays - 按特定的自定义字段对 Doctrine ArrayCollection 进行排序

cassandra - 为什么我的 Cassandra 更新不起作用?

postgresql - Cassandra 作为 PostgreSQL 的替代品

java - 在同一服务的多个实例上操作数据库中的数据