Cassandra - 如何进行分组查询和限制查询?

Cassandra - how to do group-by and limit query?

table 数据如下所示。 Table 在时间戳上有聚类顺序 desc,主键是 (name, timestamp):

name - address - timestamp
John - J_Addr 1 - Jan 01, 2017
John - J_Addr 2 - Feb 05, 2017
Mark - M_Addr 1 - Jan 01, 2017
Mark - M_Addr 2 - Mar 05, 2017

有没有办法获取每个名字的最新地址? 在上述情况下,预期结果将是:

name - address - timestamp
John - J_Addr 2 - Feb 05, 2017
Mark - M_Addr 2 - Mar 05, 2017

如果您使用的 cassandra 版本 >= 3.6 那么您可以使用 PER PARTITION LIMIT

示例:

SELECT * FROM table_name PER PARTITION LIMIT 1;

否则,如果您要插入当前时间的每个时间戳值,那么您可以创建另一个 table,如下所示:

CREATE TABLE user_address (
    name text PRIMARY KEY,
    address text
);

每当您插入到基础 table 中时,也会插入到维护的 table 中。如果你想保持这些 table.

之间的原子性,你可以使用 batch

因此每次为用户插入地址时,地址都会被更新。所以你会得到最新的地址

否则你必须从客户端扫描所有的行和组限制