给cassandra提的一个问题单又被接受了

cassandra2.1版终于出了稳定版-cassandra2.1.6版。照例把之前的功能在新版本上跑一跑。但是仍然遇到一个问题:

创建一个表

1
2
3
4
5
6
7
8
 
CREATE TABLE test (
a INT,
b INT,
c INT,
d INT,
PRIMARY KEY (a, b, c)
);

根据a=1 and b<6查询结果是:

1
SELECT * FROM test WHERE a=1 AND b<6;

a | b | c | d
—+—+—+—
1 | 3 | 1 | 2
1 | 3 | 2 | 2
1 | 3 | 4 | 2
1 | 3 | 5 | 2
1 | 4 | 4 | 2
1 | 5 | 5 | 2

(6 rows)

分页查询
第一页

1
SELECT * FROM test WHERE a=1 AND b<6 LIMIT 2;

a | b | c | d
—+—+—+—
1 | 3 | 1 | 2
1 | 3 | 2 | 2

(2 rows)

第二页

1
SELECT * FROM test WHERE a=1 AND b<6 AND (b,c) > (3,2) LIMIT 2;

a | b | c | d
—+—+—+—
1 | 3 | 4 | 2
1 | 3 | 5 | 2

(2 rows)
第三页

1
SELECT * FROM test WHERE a=1 AND b<6 AND (b,c) > (3,5) LIMIT 2;

a | b | c | d
—+—+—+—
1 | 4 | 4 | 2
1 | 5 | 5 | 2

(2 rows)

问题是:
这种查询在2.0.8版本是可行的,但是到2.1.6版本就不行了。
当执行:

1
SELECT * FROM test WHERE a=1 AND b<6 AND (b,c) > (3,2) LIMIT 2;

会得到这样一个错误:

InvalidRequest: code=2200 [Invalid query] message=”Column “b” cannot have both tuple-notation inequalities and single-column inequalities: (b, c) > (3, 2)”

作者建议我这样使用:

1
SELECT * FROM test WHERE a=1 AND (b)<6 AND (b,c) > (3,2) LIMIT 2;

作者也认为b<6 应该和 (b)<6 等价的,否则很让人迷惑。

目前已经有可用补丁出来了,这不就2.1.7版本已经出来了,预计这个补丁会合到下一个2.1.8版本中吧。

地址:https://issues.apache.org/jira/browse/CASSANDRA-9606

  1. Jerry说道:

    不管是:SELECT * FROM test WHERE a=1 AND b (3,2) LIMIT 2; 还是SELECT * FROM test WHERE a=1 AND (b) (3,2) LIMIT 2;
    在cassandra 2.1.1版本中,都没办法正常执行呀,奇怪了?

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *