使用下表定义:

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 列排序的数据,但添加数据时并非如此。

示例条目:

sorting - 聚类顺序不适用于复合分区键-LMLPHP

表 CQL:

sorting - 聚类顺序不适用于复合分区键-LMLPHP

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

最佳答案

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

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

此外,如果您的键不是 (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/

10-16 13:09