时间序列数据建模我有这样的一个表:范围查询 - 在CQL卡桑德拉
CREATE TABLE测试(partitionkey文字,rowkey文本,日期 时间戳,策略ID文本,policyname文字,主键 (partitionkey,rowkey));
一些数据:
partitionkey | rowkey | policyid | policyname |日期
p1 | r1 | pl1 | plicy1 | 2007-01-02 00:00:00+0000 p1 | r2 | pl2 | plicy2 | 2007-01-03 00:00:00+0000 p2 | r3 | pl3 | plicy3 | 2008-01-03 00:00:00+0000
我希望能够找到:
1/ data from a particular partition key
2/ data from a particular partition key & rowkey
3/ Range query on date given a partitionkey
1/2 /是微不足道:
SELECT * FROM测试,其中partitionkey = 'P1';
partitionkey | rowkey | policyid | policyname |范围
p1 | r1 | pl1 | plicy1 | 2007-01-02 00:00:00+0000 p1 | r2 | pl2 | plicy2 | 2007-01-03 00:00:00+0000
但对于3 /? 即使有索引它也不起作用:
在测试(日期)上创建索引i1;
select * from test where partitionkey ='p1'and date = '2007-01-02';
partitionkey | rowkey | policyid | policyname |日期
p1 | r1 | pl1 plicy1 | 2007-01-02 00:00:00+0000
但
SELECT * FROM测试,其中partitionkey = 'P1' 和 日期> '2007-01-02';
请求无效:无索引列存在于 逐列条款与平等运营商
任何想法? 感谢, 马特
只要查询有一个'allow filtering'子句(消息_Bad Request:无法执行此查询,因为它可能涉及数据过滤,因此可能具有不可预知的性能。性能不可预测性,请使用ALLOW FILTERING_)。这是为什么?它如何影响性能? –
我想你会看到那个警告,因为你的'rowkey'没有在该查询中指定。我引用的例子只使用了分区键和日期作为主键......我想你可以尝试将rowkey定义为分区键'primary key((partitionkey,rowkey),date)'的一部分,然后看看是否这有助于。 – Aaron
当然,但这需要我为'rowkey'添加一个我不总是拥有的子句。我想我会接受第一个解决方案,谢谢。 –