表格数据如下所示。表在时间戳上有聚类顺序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
答案 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。所以你会得到最新的地址
否则您必须从客户端扫描所有行和组限制