我有一个非常简单的表来存储日期范围内的ID集合
CREATE TABLE schedule_range (
start_date timestamp,
end_date timestamp,
schedules set<text>,
PRIMARY KEY ((start_date, end_date)));
我希望能够按日期范围查询
SELECT *
FROM schedule_range
WHERE start_date >= 'xxx'
AND end_date < 'yyy'
不幸的是,它并没有这样做。我尝试了几种不同的方法,但总是因为不同的原因而失败。
我应该如何存储ID才能在日期范围内获取所有ID?
答案 0 :(得分:2)
在cassandra中你只能使用&gt;,&lt;具有主键最后一个字段的运算符,在您的情况下为'end_date'。对于以前的字段,必须使用相等的运算符如果您只考虑该架构,也许可以使用其他选择。
一个近似值是使用Apache Spark。有一些项目在Spark over Cassandra中构建了一个抽象层,让你在cassandra中进行操作,比如连接,任何过滤器,分组......
检查这个项目:
答案 1 :(得分:1)
将此表与有点类似于您的查询一起使用是因为1)它不会在分区键start_date上使用条件。分区键仅支持EQ和IN关系。 2)聚类列上的大于和小于比较仅限于选择连续行排序的过滤器。通过聚类列过滤 - 复合键中的第二个组件 - id,执行后者。
create table schedule_range2(start_date timestamp, end_date timestamp, id int, schedules set<text>, primary key (start_date, id, end_date));
insert into schedule_range2 (start_date, id, end_date, schedules) VALUES ('2014-02-03 04:05', 1, '2014-02-04 04:00', {'event1', 'event2'});
insert into schedule_range2 (start_date, id, end_date, schedules) VALUES ('2014-02-05 04:05', 1, '2014-02-06 04:00', {'event3', 'event4'});
select * from schedule_range2 where id=1 and end_date >='2014-02-04 04:00' and end_date < '2014-02-06 04:00' ALLOW FILTERING;