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查询的建模是如何工作的。我不知道这是否适用于您的整个应用程序或数据,所以请接受它的价值