在select语句Cassandra中where子句之后的OR条件的替代

abh*_*bhi 6 select cql where cassandra

在Cassandra中是否可以在select语句中的where子句之后使用多个条件联合在一起,就像在任何RDBMS中一样.这是我的代码:

SELECT * from TABLE_NAME WHERE COND1= 'something' OR COND2 = 'something';  
Run Code Online (Sandbox Code Playgroud)

sdo*_*lgy 12

简单回答:没有OR的等价物

http://www.datastax.com/docs/0.8/dml/using_cql

以下是v0.8的命令参考:

http://www.datastax.com/docs/0.8/references/cql#cql-reference

SELECT [FIRST N] [REVERSED] FROM [USING] [WHERE] [LIMIT N];

..

WHERE子句用于过滤结果中显示的行.该子句可以过滤键名或键范围,对于索引列,可以过滤列值.键过滤器使用KEY关键字,关系运算符(=,>,> =,<和<=之一)和术语值指定.当术语出现在关系运算符的两侧时,假定过滤器适用于索引列.对于列索引过滤器,运算符左侧的术语是名称,右侧的术语是要过滤的值.


the*_*aul 12

假设COND是表的主键的名称,您可以:

SELECT * from TABLE_NAME WHERE COND1 in ('something', 'something');
Run Code Online (Sandbox Code Playgroud)

因此,没有完全一般的OR操作,但看起来这可能与您尝试做的相同.

请记住,当您使用CQL时,该查询计划并不意味着它的优势之一.Cassandra代码通常会假设您拥有大量数据,因此它会尽量避免执行任何可能最终成本高昂的查询.在RMDBS世界中,您可以根据内在关系(第三范式等)构建数据,而在Cassandra中,您可以根据预期需要的查询来构建数据.非规范化是(原谅双关语)的规范.

重点是,与旧的Thrift RPC接口相比,CQL是用于制作Cassandra查询的更熟悉,友好的语法.它不像SQL那样具有完全表达性和灵活性.

  • 保罗,我已经尝试了上面的语句,但它在cql shell中显示错误,说明不匹配的输入'IN'期望设置为null.记住在示例中,COND1是二级索引. (2认同)