在Cassandra,我正在使用cql:
select msg from log where id in ('A', 'B') and filter1 = 'filter'
(其中 id
是分区键, filter1
是辅助索引, filter1
不能用作群集列)
这给出了回复:
Select on indexed columns and with IN clause for the PRIMARY KEY are not supported
如何更改CQL以防止这种情况?
2 回答
您需要将其拆分为以下单独的查询:
和
由于数据在Cassandra中的分区方式,CQL有许多看似随意的限制(阻止低效查询,也因为它们实现起来很复杂) .
随着时间的推移,我认为这些限制将慢慢消除,但现在我们必须解决它们 . 有关限制的更多详细信息,请参阅A deep look at the CQL where clause .
另一个选择是,您可以专门为此查询(查询表)构建一个表,其中
filter1
作为分区键,id
作为聚类键 . 这样,您的查询就可以工作,并且避免将二级索引全部放在一起 .您仍然会使用“IN”,这个“IN”也不是很好 . 但是您也会指定一个分区键,因此它的性能可能比预期的要好 .