如何修复多个条件的 CQL 语法?

How to fix CQL syntax for multiple criteria?

我有以下查询,我想在其中使用多个条件过滤掉记录。但是我遇到了语法错误。

查询

SELECT * FROM mydb.test 
where org=123 
AND (status = 'over' AND ecode = 196) 
OR (status = 'start' AND ecode = 195) 
ALLOW FILTERING;

语法错误

SyntaxException: <Error from server: code=2000 [Syntax error in CQL query] 
message="line 1:88 mismatched input 'AND' expecting ')' (... AND (status = 'over' [AND]...)">

如何修复这个语法错误?

OR is not supported by Cassandra...

亚历克斯是正确的。 Cassandra 不支持 OR 关键字。这是 CQL 和 SQL 之间的区别之一。事实上,考虑到 Cassandra 的存储模型,OR 构造特别有问题。

How can I achieve this scenario?

我能想到几个办法

对于 Cassandra,数据建模的总体思路是构建适合您的查询的表。因此,首先是在数据加载上应用逻辑,但您的逻辑可能太复杂了。

您也可以将此查询拆分为两个查询(根据您的 AND 条件)并在应用程序端处理结果集。不是最优的,但它可能是获得您需要的细粒度控制的唯一方法。

另一种方法是尝试使用 IN 来解决缺少 OR 的问题。请注意不要使用 IN 限制您的分区键,并且在您这样做时始终指定您的分区键(使用 = 运算符)。这样您就可以将查询限制在单个节点上进行处理。事实上,在集群键上使用 IN(同样,在分区键上使用 =)确实是我推荐在生产系统中使用它的唯一方法。