我有一个这样的表:
CREATE TABLE测试(分区键文本、行键文本、日期时间戳、策略ID文本、策略名称文本、主键(partitionkey,rowkey));
带有一些数据:
partitionkey|rowkey|policyid|policyname|date
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/微不足道:
从测试中选择*,其中partitionkey='p1';
partitionkey|rowkey|policyid|policyname|range
p1 | r1 | pl1 | plicy1 | 2007-01-02 00:00:00+0000 p1 | r2 | pl2 | plicy2 | 2007-01-03 00:00:00+0000
但是3/呢?即使有索引也不起作用:
在测试时创建索引i1(日期);
从测试中选择*,其中partitionkey='1'和日期="2007-01-02";
partitionkey|rowkey|policyid|policyname|日期
p1 | r1 | pl1 plicy1 | 2007-01-02 00:00:00+0000
但是
从测试中选择*,其中partitionkey='p1',并且日期>"2007-01-02";
错误的请求:中不存在索引列带Equal运算符的by columns子句
知道吗?谢谢马特
CREATE TABLE测试(partitionkey文本,rowkeytext,日期时间戳,policyid文本、policyname文本、主键(partitionkey、rowkey));
首先,您确实应该使用更具描述性的列名,而不是partitionkey和rowkey(甚至是日期)。通过查看这些列名,我真的不知道这个表应该用什么样的数据进行索引
select * from test where partitionkey='p1' and date > '2007-01-02';
错误请求:在带有Equal运算符的bycolumns子句中不存在索引列
对于这个问题,请尝试将"日期"列作为主键的一部分。
primary key (partitionkey, rowkey, date)
一旦您这样做,我认为您的日期范围查询将正常工作。
有关此方面的更多信息,请查看DataStax Academy的(免费)课程"使用Apache Cassandra进行Java开发"。第5节,模块104讨论了如何对时间序列数据建模,这将对您有所帮助。