似乎在Cassandra CQL3中即时添加新列无效;说我有这张桌子:
cqlsh:Keyspace2>从用户中选择*;
user_name | birth_year |性别|密码| session_token |状态
----------- + ------------ + -------- + ------------ + --------------- ------- +
jsmith | 1968年| null | ch @ ngem3a | null |空
jsmith2 | 1963年| null | ch @ ngem3a2 | null |空
cqlsh:Keyspace2>插入用户(user_name,x)值('jsmith',100);
>错误请求:未知标识符x
也许您打算使用CQL 2?启动cqlsh时尝试使用-2选项。
但是警告是正确的,当我去CQL2时,同样的事情也有效:
> Blockquote
cqlsh:Keyspace2> exit
[root@bdvm1 ~]# cqlsh
Connected to Test Cluster at localhost:9160.
[cqlsh 2.2.0 | Cassandra 1.1.9-dse-2.2.2-SNAPSHOT | CQL spec 2.0.0 | Thrift protocol 19.33.0]
Use HELP for help.
cqlsh> use Keyspace1;
cqlsh:Keyspace1> select * from users;
KEY | birth_year | gender
-------+------------+--------
TEST | 1968 | m
TEST1 | 1968 | f
cqlsh:Keyspace1> insert into users (KEY, x) values ('jsmith',100);
cqlsh:Keyspace1> select * from users;
KEY,TEST | birth_year,1968 | gender,m
KEY,TEST1 | birth_year,1968 | gender,f
KEY,jsmith | x,100
有谁知道为什么?我原以为CQL3是向后兼容的。
感谢, 马特
答案 0 :(得分:3)
您需要阅读http://www.datastax.com/dev/blog/cql3-for-cassandra-experts和http://www.datastax.com/dev/blog/thrift-to-cql3。第一个特别解释了为什么CQL2无法模拟许多常见的Cassandra设计模式,以及我们如何在CQL3中解决这些模式。
简短回答:CQL2中称为“连续动态列”的内容在CQL3中表示为“分区中的多行”。为了减少混淆,我们现在引用name的原始存储引擎atom:value作为单元格而不是列,以及一组具有公共密钥作为分区的单元格。
答案 1 :(得分:2)
直接回答为NO,CQL3向后兼容(请参阅cql3 experts)。但这并不意味着他们已经违背了向后兼容的承诺。 CQL3背后的基础API仍然是Thrift API,它具有与0.7相同的功能,它只是实现风格已经改变的问题。