1

我在卡桑德拉有桌子:

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

我找不到这种行为的原因。

4

2 回答 2

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)

正如您的链接所描述的那样,这是因为前面的列是为相等而定义的,并且查询的列都不是集合类型。

于 2016-01-23T13:31:34.310 回答
1

由于您的 Cassandra 版本,这可能是一个限制。正如 Cedric 所指出的,它在 2.2 中对他有效(或者更确切地说,没有出错)。

但是,当我阅读您的问题时,我想起了我在 2015 年芝加哥 Cassandra Day 上发表的演示文稿中的一张幻灯片。来自CQL:这不是您正在寻找的 SQL,silde #15:

  • 只能对最后一个分区键和/或最后一个集群键进行操作。

当时(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');

于 2016-01-23T17:41:54.993 回答