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

问题描述 投票:3回答:1

使用以下表定义:

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行排序的数据?

sorting cassandra cassandra-3.0 compound-key
1个回答
4
投票

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

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

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

以真正的nosql方式执行此操作的方法是创建一个单独的表,其中您的密钥是year, created_at, comm_nr。您可以在用户创建时写入两者,但如果您需要首先创建其帐户的人员的答案,则您将查询新表。

© www.soinside.com 2019 - 2024. All rights reserved.