【问题标题】:Range query - Data modeling for time series in CQL Cassandra范围查询 - CQL Cassandra 中时间序列的数据建模
【发布时间】:2014-03-04 06:04:31
【问题描述】:

我有一张这样的桌子:

CREATE TABLE 测试(分区键文本、行键文本、日期 时间戳、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 日期 > '2007-01-02';

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

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

【问题讨论】:

    标签: cassandra cql cql3 cqlsh


    【解决方案1】:

    CREATE TABLE 测试(partitionkey 文本、rowkey 文本、日期时间戳、 policyid text, policyname text, primary key (partitionkey, rowkey));

    首先,您确实应该使用更具描述性的列名,而不是 partitionkey 和 rowkey(甚至日期,就此而言)。通过查看这些列名,我真的无法判断该表应该被什么样的数据索引。

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

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

    至于这个问题,请尝试将“日期”列作为主键的一部分。

    primary key (partitionkey, rowkey, date)
    

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

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

    【讨论】:

    • 正确,只要查询具有“允许过滤”子句(消息 错误请求:无法执行此查询,因为它可能涉及数据过滤,因此可能具有不可预测的性能。如果尽管性能不可预测,但要执行此查询,请使用 ALLOW FILTERING)。为什么会这样?它如何影响性能?
    • 我认为您看到了该警告,因为您的 rowkey 未在该查询中指定。我引用的示例仅使用分区键和日期作为主键...我想您可以尝试将行键定义为分区键 primary key ((partitionkey, rowkey), date) 的一部分,看看是否有帮助。
    • 当然,但是它需要我为“rowkey”添加一个我并不总是拥有的子句。我想我会接受第一个解决方案,谢谢。
    猜你喜欢
    • 2013-01-02
    • 2015-03-10
    • 1970-01-01
    • 2014-05-07
    • 2013-08-14
    • 2021-11-19
    • 2018-01-15
    • 2015-06-06
    • 2015-09-14
    相关资源
    最近更新 更多