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

时间:2017-07-14 05:21:32

标签: cassandra datastax cql datastax-java-driver

表格数据如下所示。表在时间戳上有聚类顺序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

1 个答案:

答案 0 :(得分:1)

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

示例:

SELECT * FROM table_name PER PARTITION LIMIT 1;

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

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

每当插入基表时,也会插入到维护表中。如果要在这些表之间保持原子性,可以使用批处理。

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

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