【问题标题】:Cassandra CQL - get records since 1 before timestampCassandra CQL - 在时间戳之前获取自 1 以来的记录
【发布时间】:2020-05-14 15:46:39
【问题描述】:

我有下表:

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,但很难 维护,因为我有时会出现乱序读取。

【问题讨论】:

    标签: cassandra cql


    【解决方案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;
    

    【讨论】:

    • 我现在会使用它,但很高兴知道一种更有效的方法,因为我会经常(很多)次这样做......谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多