我在cassandra有桌子:
CREATE TABLE pica_pictures (
p int,
g text,
id text,
a int,
PRIMARY KEY ((p), g, id)
)
然后我尝试用查询选择数据:
cqlsh> select * from picapica_realty.pica_pictures where p = 1 and g in ('1', '2');
Bad Request: Clustering column "g" cannot be restricted by an IN relation
我无法找到这种行为的原因。
答案 0 :(得分:1)
这与Cassandra 2.2有关。
cqlsh:ks> CREATE TABLE pica_pictures (
... p int,
... g text,
... id text,
... a int,
... PRIMARY KEY ((p), g, id)
... );
cqlsh:ks> select * from pica_pictures where p = 1 and g in ('1', '2');
p | g | id | a
---+---+----+---
(0 rows)
正如您的链接所描述的那样,因为前面的列是相等的,所以查询的列都不是集合类型。
答案 1 :(得分:1)
由于您的Cassandra版本,这可能会受到限制。正如塞德里克所说,它在2.2中适用于他(或者更确切地说,没有错误)。
然而,当我读到你的问题时,我回忆起我在2015年芝加哥Cassandra Day的演讲中的幻灯片。来自CQL: This is not the SQL you are looking for,silde#15:
<强> IN 强>
- 只能操作最后一个分区键和/或最后一个群集密钥。
当时(2015年4月),Cassandra的最新版本为2.1.4或2.1.5。
就目前而言(使用Cassandra 2.1),您需要将主键定义调整为PRIMARY KEY ((p), g)
,或者将WHERE子句调整为类似where p = 1 and g = 1 and id in ('id1', 'id2');