我有一张这样的表:
CREATE TABLE test(分区键文本,rowkey文本,日期 timestamp,policyid文本,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 test where 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 /? 即使有索引它也不起作用:
在test(date)上创建索引i1;
select * from test where partitionkey ='p1'和date = '2007-01-02';
partitionkey | rowkey | policyid | policyname |日期
p1 | r1 | pl1 plicy1 | 2007-01-02 00:00:00+0000
但
从test中选择*,其中partitionkey ='p1'和 日期> '2007-01-02';
错误请求:没有索引列 with-columns子句与Equal运算符
有什么想法吗? 谢谢, 马特
答案 0 :(得分:2)
CREATE TABLE测试( partitionkey 文本, rowkey 文本,日期时间戳, policyid文本,policyname文本,主键(partitionkey,rowkey));
首先,你真的应该使用更多描述性的列名而不是partitionkey和rowkey(甚至是日期,就此而言)。通过查看这些列名,我真的无法分辨出该表应该被索引的数据类型。
select * from test where partitionkey='p1' and date > '2007-01-02';
错误请求:使用Equal运算符
的by-columns子句中不存在索引列
对于此问题,请尝试将“日期”列作为主键的一部分。
primary key (partitionkey, rowkey, date)
一旦你这样做,我认为你的日期范围查询将正常运作。
有关这方面的更多信息,请查看名为Java Development with Apache Cassandra的DataStax Academy's(免费)课程。第5节,第104单元讨论了如何对时间序列数据建模,这应该可以帮助你。