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

时间:2014-02-07 01:00:13

标签: cassandra cql cql3 cqlsh

我有一张这样的表:

  

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运算符

有什么想法吗? 谢谢, 马特

1 个答案:

答案 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单元讨论了如何对时间序列数据建模,这应该可以帮助你。