CQL SELECT无法处理复合列的"in"

Zer*_*001 3 cql cassandra cql3

我正在努力与cassandra和CQL.我正在定义这个表模式,

CREATE TABLE useradvisits (
  userid text,
  adid int,
  type int,
  timestamp timestamp,
  PRIMARY KEY (userid, adid, type)
 );
Run Code Online (Sandbox Code Playgroud)

我想这样查询,

SELECT * from useradvisits where userid = 'user-1' and adId in (100, 1001);
Run Code Online (Sandbox Code Playgroud)

但是它说,Bad Request:PRIMARY KEY部分adid不能被IN关系限制

我正在使用最新的datstax企业版3.1.

cqlsh控制台说,

[cqlsh 3.1.2 | Cassandra 1.2.6.1 | CQL spec 3.0.0 | Thrift protocol 19.36.0]
Run Code Online (Sandbox Code Playgroud)

因为我需要(adId + type)是唯一的,即(100:1),(100:2)都存在于用户.任何人都可以帮我解决方法吗?

Joh*_*ohn 7

您从adid和type创建了一个复合列键.您可以添加到行键以创建合成.只需创建一个模型,PRIMARY KEY ((userid, adid), type)您的查询就可以了.在这种方法的下方:您将始终必须指定adid.

您也可以执行相反的操作,并将类型添加到行键.如果你事先知道"类型"的范围,这可能会更好.