Cassandra中的IN运算符不适用于具有类型为collection(映射或列表)的列的表
我正在研究卡桑德拉,试图了解它是如何工作的。在运算符中使用时遇到异常情况。例如: 表:Cassandra中的IN运算符不适用于具有类型为collection(映射或列表)的列的表,cassandra,nosql,Cassandra,Nosql,我正在研究卡桑德拉,试图了解它是如何工作的。在运算符中使用时遇到异常情况。例如: 表: CREATE TABLE test_time ( name text, age int, time timeuuid, "timestamp" timestamp, PRIMARY KEY ((name, age), time) ) 我插入了一些虚拟数据。在运算符中使用,如下所示: SELECT * from test_time where name="9" and age=81 and
CREATE TABLE test_time (
name text,
age int,
time timeuuid,
"timestamp" timestamp,
PRIMARY KEY ((name, age), time)
)
我插入了一些虚拟数据。在运算符中使用,如下所示:
SELECT * from test_time
where name="9" and age=81
and time IN (c7c88000-190e-11e4-8000-000000000000, c7c88000-190e-11e4-7000-000000000000);
它工作正常
然后,添加类型为Map的列。表将如下所示:
CREATE TABLE test_time (
name text,
age int,
time timeuuid,
name_age map<text, int>,
"timestamp" timestamp,
PRIMARY KEY ((name, age), time)
)
在执行同一查询时,我遇到以下错误:
错误的请求:由于查询选择了集合,因此无法通过关系限制主键兼职
从上面的例子中,我们可以说,如果表中有collectionMap或List类型的任何列,IN运算符不起作用
我不明白它为什么会这样。如果我遗漏了什么,请告诉我。提前谢谢。是的……这是一个限制。您可以执行以下操作: 选择*from…,其中name='9'和age=81,time>x和time
CREATE TABLE test_time (
name text,
age int,
time timeuuid,
"timestamp" timestamp,
PRIMARY KEY ((name, time), age)
);
或者创建单独的物化视图以满足查询要求:
CREATE MATERIALIZED VIEW test_time_mv AS
SELECT * FROM test_time
WHERE name IS NOT NULL AND time IS NOT NULL AND age IS NOT NULL
PRIMARY KEY ((name, time), age);
现在在查询中使用物化视图,而不是基表:
SELECT * from test_time_mv
where name='9'
and age=81
and time IN (c7c88000-190e-11e4-8000-000000000000,
c7c88000-190e-11e4-7000-000000000000);
谢谢我得到了它。你知道为什么它是这样设计的吗。为什么收集会产生这样的问题?可能是因为cassandra无法对磁盘上的数据布局做出假设。也许他们将来会修好的。谢谢。。希望他们能修好。看起来很奇怪。