问题 任何列上的Cassandra CQL都不等于运算符


嗨,有什么方法可以使用!=运算符在Cassandra中使用CQL? 我试图在我的columnfamily上使用!=运算符但是当我尝试使用它时它说:

cqlsh:EPCContent> select * from "MediaCategoryGroup" where "MCategoryID"!=1;

我收到此错误:

Invalid syntax at line 1, char 55
  select * from "MediaCategoryGroup" where "MCategoryID"!=1;
                                                        ^

3995
2017-10-14 22:12


起源



答案:


如果你看看 Cassandra SELECT语法,你会看到的 WHERE 子句必须“由作为PRIMARY KEY一部分的列上的关系组成和/或在其上定义二级索引。”您的专栏是否符合该规范?

仅供参考,这是关系运算符的完整列表: '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY


15
2017-10-15 08:10



但我们可以使用“<”| “>”| “<=”| “> =”仅当该字段是主键时。 - Gargee Banerjee
是的,在Cassandra你只能在主键字段(也来自复合键)或“二级索引”上执行此操作,并且并非所有时间都可能... - emgsilva
如何获取特定字段不为空的所有行? - David Torres
@DavidTorres我不确定您是否能够直接在Cassandra查询上执行此操作。如上所述,您不能使用“!=”运算符(不确定在最近版本的Cassandra上是否已更改)。此外,我相信你可以在过滤/运算符中使用的字段(主键或复合键的一部分)都需要与null不同...所以,很可能你需要执行相关元素的读取然后再做一些其他的过滤您的应用程序。 - emgsilva


答案:


如果你看看 Cassandra SELECT语法,你会看到的 WHERE 子句必须“由作为PRIMARY KEY一部分的列上的关系组成和/或在其上定义二级索引。”您的专栏是否符合该规范?

仅供参考,这是关系运算符的完整列表: '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY


15
2017-10-15 08:10



但我们可以使用“<”| “>”| “<=”| “> =”仅当该字段是主键时。 - Gargee Banerjee
是的,在Cassandra你只能在主键字段(也来自复合键)或“二级索引”上执行此操作,并且并非所有时间都可能... - emgsilva
如何获取特定字段不为空的所有行? - David Torres
@DavidTorres我不确定您是否能够直接在Cassandra查询上执行此操作。如上所述,您不能使用“!=”运算符(不确定在最近版本的Cassandra上是否已更改)。此外,我相信你可以在过滤/运算符中使用的字段(主键或复合键的一部分)都需要与null不同...所以,很可能你需要执行相关元素的读取然后再做一些其他的过滤您的应用程序。 - emgsilva