如何修复多个条件的 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
(同样,在分区键上使用 =
)确实是我推荐在生产系统中使用它的唯一方法。
我有以下查询,我想在其中使用多个条件过滤掉记录。但是我遇到了语法错误。
查询
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
(同样,在分区键上使用 =
)确实是我推荐在生产系统中使用它的唯一方法。