cassandra滤波器两列

vfhzx4xs  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(457)

有没有一种方法可以过滤大于一列小于另一列的内容,或者适当地建模?

create table foo (id int, low int, high int, primary key (id, low, high));

这些查询工作:

select * from foo;
select * from foo where id = 1 and  low < 0;

但此查询不:

select * from foo where id = 1 and  low < 0 and high >10;

结果是:
invalidrequest:来自服务器的错误:code=2200[invalid query]message=“clustering column”high”cannot be restricted(前一列“low”受非eq关系限制)
我现在已经求助于允许过滤。它在一个分区上,并且对远远超出预期场景的跟踪在可接受的范围内执行,但是我想知道是否有更好的方法对表进行建模,以便所有人都获得信息而不进行筛选?

rkkpypqq

rkkpypqq1#

在我看来,您可以做的唯一一件事就是在对象的物化视图中进行过滤 high 数值如下:

CREATE MATERIALIZED VIEW IF NOT EXISTS foo_high_first 
AS SELECT id, low, high FROM foo
WHERE id IS NOT NULL AND low IS NOT NULL AND high IS NOT NULL
PRIMARY KEY (id, high, low);

然后可以执行以下查询:

cqlsh:my_keyspace> select * from foo_high_first where id = 1 and high > 3;

 id | high | low
----+------+-----
  1 |    6 |   1

在应用程序中,必须在低值和高值之间进行交集。
另外,请记住,您可以对集群列进行排序,从而对低值和高值进行排序。

相关问题