Cassandra:[无效查询] message =“PRIMARY KEY列”lng“不能被限制

时间:2014-12-02 13:59:03

标签: cassandra cql

我在cqlsh

中执行以下查询时遇到错误

查询

SELECT * FROM ragchews.disc_location WHERE country_code = 12 AND lat > 100.00 and lat < 120.00 and lng > 50 and lng < 100 allow filtering;

CREATE TABLE ragchews.disc_location (
    country_code int,
    lat float,
    lng float,
    uid text,
    PRIMARY KEY (country_code, lat, lng, uid)
);

错误:

code=2200 [Invalid query] message="PRIMARY KEY column "lng" cannot be restricted (preceding column "ColumnDefinition{name=lat, type=org.apache.cassandra.db.marshal.FloatType, kind=CLUSTERING_COLUMN, componentIndex=0, indexName=null, indexType=null}" is either not restricted or by a non-EQ relation)"

Cassandra版本

[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]

编辑1

以下查询对我来说很好

SELECT * FROM ragchews.disc_location WHERE country_code=91 and lat > 32 and lat < 100  allow filtering;

lng看起来有问题。

2 个答案:

答案 0 :(得分:3)

你不能有这样的查询。您可以为where子句群集密钥的最后一部分添加> or <,为前面的密钥提供=。例如,以下查询将正常工作,

SELECT * FROM ragchews.disc_location WHERE country_code = 12 AND lat = 100.00 and lng > 50 and lng < 100;

甚至以下内容都可行,

SELECT * FROM ragchews.disc_location WHERE country_code = 12 AND lat = 100.00 and lng = 50 and uid > '500' and uid  < '1000'

但是> or < condition的两个where子句将不起作用。

答案 1 :(得分:2)

如果我理解这一点,你必须对除了最后一个之外的所有复合键列使用'='运算符。可以使用'&lt;'限制最后一个(在您的情况下 lng )或'&gt;'。

此处链接:http://www.datastax.com/dev/blog/whats-new-in-cql-3-0