【发布时间】:2017-10-01 22:06:09
【问题描述】:
我在玩 Cassandra(cql)。当我执行 SELECT 时,它会返回一个错误:
不能限制聚类列“domain”(前面的列“timestamp”受非 EQ 关系限制)。
“domain”(varchar 类型)和“timestamp”(timestamp 类型)列是主键。
当我像这样只按“时间戳”过滤时:
SELECT id, comment, language, location, section, domain, type, user, timestamp
FROM comments WHERE ts >= ? AND ts <= ? ALLOW FILTERING;
工作正常,但是当我尝试过滤包括“域”时返回该错误:
SELECT id, comment, language, location, section, domain, type, user, timestamp
FROM comments WHERE domain=? AND ts >= ? AND ts <= ? ALLOW FILTERING;
创建表 CQL:
CREATE TABLE table (
id varchar,
type varchar,
section varchar,
comment text,
language varchar,
location text,
user int,
domain varchar,
timestamp timestamp,
PRIMARY KEY (id, timestamp, domain, user, section))
WITH CLUSTERING ORDER BY (timestamp DESC);
【问题讨论】:
-
您是否看过 official documentation 关于
WHERECassandra 的限制?它明确指出,范围查询只能在 WHERE 子句的最后一部分,并且错误表明您正在以非受限方式使用ts。顺便说一下,错误是 Clustering column,您可能低估了表定义中的某些内容(例如,分区键、集群键)。贴出来看看…… -
这是我的表定义。
CREATE TABLE table ( id varchar, type varchar, section varchar, comment text, language varchar, location text, user int, domain varchar,timestamp timestamp, PRIMARY KEY (id,timestampdomain,user,section)) WITH CLUSTERING ORDER BY (ts DESC);
标签: cassandra cql database nosql