是否可以跟踪"预订"与cassandra?
基本上,我的大部分查询都涉及start_time
和end_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。
任何帮助都会很棒!
答案 0 :(得分:1)
在DataStax网站上有一篇非常好的博客文章详细解释了您可以在WHERE子句中使用的内容以及为什么有这些限制。检查here。总之,在受限制的最后一组聚类列上允许多列切片限制。