我知道cassandra不支持where子句中的or,但是我需要一个等价的查询:
select * from table where column1 = '123' or column2 = '123';
由于cassandra不支持或不支持,我可以使用如下批处理查询并将结果组合到程序中,它是否有效?
[ select * from table where column1 = '123' , select * from table where column2 = '123']
如果没有,就没有办法实现上述简单逻辑。
在我的例子中,column1和column2一起是主键。i、 e.复合分区密钥。
我可以将column1和column2合并为一个列表[column1,column2]并进行如下查询:
select * from table where list contains '123';
并在列表上创建二级索引
1条答案
按热度按时间b1zrtrql1#
正如您所说的,不能使用或进行查询,也不能在不使用辅助索引或允许筛选的情况下执行这两个查询。
根据这些疑问,可能性是;
column1
或者column2
是分区键column1
以及column2
是分区键其中一个是分区密钥,另一个是集群密钥。
你不能根据这些可能性来查询它们。如果您想查询它们
allow filtering
,则需要创建辅助索引。之后,您可以进行两个查询,并在应用程序层上对它们进行比较。二级指数不是万能的,这里和这里都有很好的解释。如果你需要那种
or
查询然后最好根据查询重新设计表,以避免像这样的二级索引或允许过滤。