聚合键的限制为" IN"在cassandra的条件

时间:2016-01-23 08:47:30

标签: cassandra cassandra-2.1

我在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

我无法找到这种行为的原因。

2 个答案:

答案 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');

的内容