Cassandra DB:为什么不到查询失败?

Mar*_*ang 2 cassandra

我创建了一个KEYSPACE和一个TABLE,其中uuid列为主键,timestamp列使用索引.所有这些都成功如下图所示:

cassandra@cqlsh:my_keyspace> insert into my_test ( id, insert_time, value ) values ( uuid(), '2015-03-12 09:10:30', '111' );
cassandra@cqlsh:my_keyspace> insert into my_test ( id, insert_time, value ) values ( uuid(), '2015-03-12 09:20:30', '222' );
cassandra@cqlsh:my_keyspace> select * from my_test;

 id                                   | insert_time              | value
--------------------------------------+--------------------------+-------
 9d7f88bc-5cb9-463f-b679-fd66e6469eb5 | 2015-03-12 09:20:30+0000 |   222
 69579f6f-bf88-493b-a1d6-2f89fac25650 | 2015-03-12 09:10:30+0000 |   111

(2 rows)
Run Code Online (Sandbox Code Playgroud)

现在查询

cassandra@cqlsh:my_keyspace> select * from my_test where insert_time = '2015-03-12 09:20:30';

 id                                   | insert_time              | value
--------------------------------------+--------------------------+-------
 9d7f88bc-5cb9-463f-b679-fd66e6469eb5 | 2015-03-12 09:20:30+0000 |   222

(1 rows)
Run Code Online (Sandbox Code Playgroud)

现在用少于的查询:

cassandra@cqlsh:my_keyspace> select * from my_test where insert_time < '2015-03-12 09:20:30';
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes on the restricted columns support the provided operators: 'insert_time < <value>'"
Run Code Online (Sandbox Code Playgroud)

虽然第一个查询成功,为什么会这样?我应该如何使第二个查询成功,因为这正是我想要的?

您可以在自己的机器上测试所有这些.谢谢

CREATE TABLE my_test (
    id uuid PRIMARY KEY,
    insert_time timestamp,
    value text
) ;
CREATE INDEX my_test_insert_time_idx ON my_keyspace.my_test (insert_time);
Run Code Online (Sandbox Code Playgroud)

ash*_*hic 8

Cassandra范围查询非常有限.它归结为性能和数据存储机制.范围查询必须具有以下内容:

点击一个(或少数带有IN)分区键,并在所有连续的聚类键上包含完全匹配,但查询中的最后一个除外,您可以对其进行范围查询.

假设你的PK是(a,b,c,d),那么允许以下内容:

  • 其中a = a1且b <b1
  • 其中a = a1且b = b1且c <c1

以下不是:

  • 其中a = a1且c <1

[我不会在这里进行允许过滤......避免它.]

辅助索引必须是完全匹配.您不能对它们进行范围查询.