1

我有一张这样的桌子:

CREATE TABLE 测试(partitionkey 文本、rowkey 文本、日期时间戳、policyid 文本、policyname 文本、主键(partitionkey、rowkey));

有一些数据:

分区键 | 行键 | 政策标识 | 政策名称 | 日期

     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';

分区键 | 行键 | 政策标识 | 政策名称 | 范围

    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';

分区键 | 行键 | 政策标识 | 政策名称 | 日期

  p1 |  r1 |   pl1   plicy1 | 2007-01-02 00:00:00+0000

select * from test where partitionkey='p1' and date > '2007-01-02';

错误请求:使用 Equal 运算符的 by-columns 子句中不存在索引列

任何想法?谢谢,马特

4

1 回答 1

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)

一旦你这样做了,我认为你的日期范围查询将正常运行。

有关这方面的更多信息,请查看DataStax Academy 的(免费)课程,名为使用 Apache Cassandra 进行 Java 开发。第 5 节,模块 104 讨论了如何对时间序列数据进行建模,这应该会对您有所帮助。

于 2014-02-07T17:27:53.683 回答