范围查询-CQL Cassandra中时间序列的数据建模



我有一个这样的表:

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讨论了如何对时间序列数据建模,这将对您有所帮助。

最新更新