在Cassandra CQL2中选择语句不一致

时间:2013-04-13 17:37:34

标签: cassandra cql

问题 - 我能够使用CQL2中不存在的列值上的select语句检索结果(但这在CQL3中不会发生);谁可以给我解释一下这个 ?

你明白为什么我会在我的选择查询中得到一个不存在的C0列值('test')的结果吗? 我不明白 - 见下文: 一定有什么错误的配置,但是什么?

cqlsh> use Keyspace1;
cqlsh:Keyspace1> CREATE COLUMNFAMILY users (
             ... KEY varchar PRIMARY KEY,
             ... gender varchar,
         ... birth_year bigint);
cqlsh:Keyspace1> INSERT INTO users (KEY, gender, birth_year) VALUES ('TEST', 'm', 1968);
cqlsh:Keyspace1> select * from users;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

cqlsh:Keyspace1> select * from users where key = 'TEST';
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

cqlsh:Keyspace1> CREATE INDEX birth_year_key ON users (birth_year);
cqlsh:Keyspace1> CREATE INDEX gender_key ON users (gender);
cqlsh:Keyspace1> select * from users where key = 'TEST' and birth_year = 1968;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

cqlsh:Keyspace1> select * from users where  birth_year = 1968;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m
到目前为止,这么好,但现在看:

cqlsh:Keyspace1> select * from users where key = 'TEST' and birth_year = 1962;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

这是怎么回事? 谢谢, 马特

1 个答案:

答案 0 :(得分:2)

听起来像是CQL2中的一个错误。

这就是事情:基本上CQL2仍然存在的唯一原因是,针对它编写的少数应用程序继续工作。不会添加任何新功能,也不会修复任何错误(因为这可能会导致其他地方出现回归)。

因此,如果您正在构建一个新的应用程序,那么绝对应该使用CQL3。不要将CQL2视为任何有意义的单词意义上的替代。有关CQL2缺点的详细信息,请参阅http://www.datastax.com/dev/blog/cql3-for-cassandra-experts,这些缺点促使我们创建CQL3作为替代。