Cassandra CQL-从时间戳记1开始获取记录

时间:2020-05-14 07:18:13

标签: cassandra cql

我有下表:

CREATE TABLE records( device_id text, read_time timestamp, data_row text, PRIMARY KEY (device_id, read_time )) WITH CLUSTERING ORDER BY (read_time DESC);

我想获取在特定read_time之前从一个记录开始的所有记录。 有没有办法做到这一点? 我以为可能还有另一个字段previous_read_time,但是很难 维护,因为我有时会读取故障。

1 个答案:

答案 0 :(得分:1)

我认为没有任何CQL语句可以做到这一点(时间戳列上的过滤器加上第一个与时间过滤器不匹配的记录)。但是根据您的实际情况,也许以下内容对您有用?

例如,我将在2020-05-14 00:00:01之后找到所有read_time加上2020-05-14 00:00:01之前或之前的第一个记录:

  1. 选择我选择的时间(2020-05-14 00:00:01)之后的所有记录。
SELECT * FROM records WHERE device_id=? AND read_time > '2020-05-14 00:00:01';
  1. 从第一个查询的结果中获取记录,其读取时间最接近2020-05-14 00:00:01
// Let's say you find records with the following times. 
// The earliest (closest to the filter's time) is 2020-05-14 00:00:55
2020-05-14 00:00:55
2020-05-14 00:00:56
2020-05-14 00:30:55
2020-05-14 13:30:55

  1. 再次选择并找到在步骤2中找到的“最接近过滤时间的时间”之前的第一条记录。
SELECT * FROM records WHERE device_id=? AND read_time < 2020-05-14 00:00:55 LIMIT 1;