卡桑德拉过滤两列

问题描述 投票:1回答:1

有没有一种方法来过滤大于另一个多列,少,或适当的模型?

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:从服务器错误:代码= 2200 [查询无效]消息=“聚类列‘高’不能被限制(前一列‘低’被非-EQ关系限制)”

目前我已经使出允许过滤。它在一个分区上,而迹线的情况远远超过预期的情况下在可接受的范围执行,但我不知道是否有更好的方法,而不会导致滤波表模型来获取所有的信息?

cassandra cql
1个回答
0
投票

在我看来,你唯一可以做的事情是为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

在应用程序,你必须做的低值和高值之间的交集。

另外,请记住,您可以订购集群列,从而获得具有低和高的数字排序。

© www.soinside.com 2019 - 2024. All rights reserved.