Cassandra,处理开始和结束时间范围

时间:2016-07-28 15:25:31

标签: cassandra

是否可以跟踪"预订"与cassandra?

基本上,我的大部分查询都涉及start_timeend_time,我希望找到与该时间相交的所有预订。

我的架构如下所示:

CREATE TABLE IF NOT EXISTS events (
    calendar_id text,
    uid text,
    start_time timestamp,
    end_time timestamp,
    dummy text,
    payload text,
    PRIMARY KEY (calendar_id, start_time, end_time, dummy)
);

我输入了一些数据,如下:

  INSERT INTO events
      (calendar_id, start_time, end_time, uid, dummy, payload)
      VALUES ('cal1', '2016-07-25T12:30:00-06', '2016-07-25T13:30:00-06', 'event1', '0', '{"description": "test"}');

我正在尝试这样的查询:

  SELECT * FROM events
      WHERE calendar_id = 'cal1'
      AND dummy = '0'
      AND start_time <= '2016-07-25T13:30:00-06' 
      AND end_time >= '2016-07-25T12:00:00-06';

我收到这样的错误:

InvalidRequest: code=2200 [Invalid query] message="Clustering column "end_time" cannot be restricted (preceding column "start_time" is restricted by a non-EQ relation)"

认为可以做到,因为在这个SO问题中似乎如此:Storing time ranges in cassandra

但是,架构未发布,我们也没有使用pycassa,我似乎无法弄清楚如何将其映射到CQL。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

在DataStax网站上有一篇非常好的博客文章详细解释了您可以在WHERE子句中使用的内容以及为什么有这些限制。检查here。总之,在受限制的最后一组聚类列上允许多列切片限制。