问题 - 我能够使用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
这是怎么回事? 谢谢, 马特
答案 0 :(得分:2)
听起来像是CQL2中的一个错误。
这就是事情:基本上CQL2仍然存在的唯一原因是,针对它编写的少数应用程序继续工作。不会添加任何新功能,也不会修复任何错误(因为这可能会导致其他地方出现回归)。
因此,如果您正在构建一个新的应用程序,那么绝对应该使用CQL3。不要将CQL2视为任何有意义的单词意义上的替代。有关CQL2缺点的详细信息,请参阅http://www.datastax.com/dev/blog/cql3-for-cassandra-experts,这些缺点促使我们创建CQL3作为替代。