Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 可以在CQL查询中使用复杂的布尔逻辑吗?_Cassandra_Cql - Fatal编程技术网

Cassandra 可以在CQL查询中使用复杂的布尔逻辑吗?

Cassandra 可以在CQL查询中使用复杂的布尔逻辑吗?,cassandra,cql,Cassandra,Cql,在卡桑德拉,像这样的桌子 CREATE TABLE test.TestTable3 ( PK1 int, PK2 int, CK3 int, CK4 int, CK5 text, CK6 int, CK7 int, Dump text, PRIMARY KEY ((PK1,PK2,CK3),CK4,CK5,CK6,CK7) ); 如何使用或使用部分或部分查询ie之类的查询 Select * from testtable3 where Pk1

在卡桑德拉,像这样的桌子

CREATE TABLE test.TestTable3 (
   PK1 int,
   PK2 int,
   CK3 int,
   CK4 int,
   CK5 text,
   CK6 int,
   CK7 int,
   Dump text,
   PRIMARY KEY ((PK1,PK2,CK3),CK4,CK5,CK6,CK7)
);
如何使用或使用部分或部分查询ie之类的查询

Select * from testtable3 where Pk1=1 and Pk2=2 and Ck3 =2 and Ck4 =4 and (( CK=5 ="ABC" 
and  CK6=1) or ( CK=5 ="BBC" and CK6=1))

首先,我要说的是,Cassandra不支持复杂的临时查询。Cassandra查询语言(CQL)是SQL的子集(不是实现)。因此,您不能在CQL中完成所有可能在SQL中工作的事情

其次,CQL不支持
运算符。但是,在某些情况下,您可以在
中使用
。本质上,
中的
只对分区键起作用。并且仅在最后一个分区键上,如果使用复合分区键(如您所示)。不过,请注意,由于Cassandra旨在为特定的主键查询提供读取服务,因此不建议在
中使用
。有关更多信息,请参阅

第三,与关系数据库不同,在Cassandra中,在将数据构建到多个表以支持每个所需查询的同时,对数据进行非规范化/复制是一种很好的做法。考虑到这一点,您可以创建如下查询表:

CREATE TABLE TestTable4 (
   PK1 int,
   PK2 int,
   CK3 int,
   CK4 int,
   CK5 text,
   CK6 int,
   CK7 int,
   Dump text,
   PRIMARY KEY ((PK1,PK2,CK3,CK4,CK6,CK5),CK7)
);
注意我是如何扩展分区键的,并更改了
CK5
CK6
的顺序。给定此表结构,此查询将起作用:

aploetz@cqlsh:stackoverflow> SELECT * FROM testtable4 WHERE pk1=1 AND pk2=2 AND ck3=3
              ... AND ck4=4 AND ck6=1 AND ck5 IN ('ABC','BBC');

 pk1 | pk2 | ck3 | ck4 | ck6 | ck5 | ck7 | dump
-----+-----+-----+-----+-----+-----+-----+---------
   1 |   2 |   3 |   4 |   1 | ABC |   7 | row ABC
   1 |   2 |   3 |   4 |   1 | BBC |   7 | row BBC

(2 rows)
注意:我使用这个结构向您展示了基于Cassandra查询的建模是如何工作的。我不知道这是否适用于您的整个应用程序或数据,所以请接受它的价值