在Cassandra CQL3中,似乎无法即时添加新列; 说我有这张桌子:

cqlsh:Keyspace2>从用户选择*;

用户名| 出生年份| 性别| 密码 session_token |

----------- + ------------ + -------- + ------------ + --- ------------ + -------

史密斯| 1968年| 空| ch @ ngem3a | 空| 空值

jsmith2 | 1963年| 空| ch @ ngem3a2 | 空| 空值

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是向后兼容的..

谢谢,马特

===============>>#1 票数:3

您需要阅读http://www.datastax.com/dev/blog/cql3-for-cassandra-expertshttp://www.datastax.com/dev/blog/thrift-to-cql3 特别是第一个解释了为什么CQL2无法建模许多常见的Cassandra设计模式,以及我们如何解决CQL3中的那些问题。

简短的答案:CQL2中称为“一行中的动态列”的CQL2在CQL3中表示为“分区中的多个行”。 为了减少混淆,我们现在将name:value的原始存储引擎原子称为一个单元,而不是一个列,并将一组具有公共键的单元称为分区。

===============>>#2 票数:2

直接答案将为否,CQL3向后不兼容(请参阅cql3专家 )。 但这并不意味着他们违反了向后兼容的承诺。 CQL3背后的基本API仍然是Thrift API,它自0.7起具有相同的功能,只是实现样式已更改。

  ask by matthieu lieber translate from so

未解决问题?本站智能推荐: