从cassandra表中获取行,该表匹配column1='123'或column2='123'

watbbzwu  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(362)

我知道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';

并在列表上创建二级索引

b1zrtrql

b1zrtrql1#

正如您所说的,不能使用或进行查询,也不能在不使用辅助索引或允许筛选的情况下执行这两个查询。

select * from table where column1 = '123' 
select * from table where column2 = '123'

根据这些疑问,可能性是; column1 或者 column2 是分区键 column1 以及 column2 是分区键
其中一个是分区密钥,另一个是集群密钥。
你不能根据这些可能性来查询它们。如果您想查询它们 allow filtering ,则需要创建辅助索引。之后,您可以进行两个查询,并在应用程序层上对它们进行比较。二级指数不是万能的,这里和这里都有很好的解释。
如果你需要那种 or 查询然后最好根据查询重新设计表,以避免像这样的二级索引或允许过滤。

相关问题