1

似乎动态添加新列在 Cassandra CQL3 中不起作用;说我有这张桌子:

cqlsh:Keyspace2> 从用户中选择 *;

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

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

史密斯 | 1968 | 空 | ch@ngem3a | 空 | 无效的

史密斯2 | 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 是向后兼容的..

谢谢,马特

4

2 回答 2

3

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

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

于 2013-04-17T13:28:26.303 回答
2

直接回答是否定的,CQL3 向后不兼容(请参阅cql3 专家)。但这并不意味着他们违背了向后兼容的承诺。CQL3 背后的基础 API 仍然是 Thrift API,从 0.7 开始具有相同的功能,只是实现方式发生了变化。.

于 2013-04-17T12:54:50.607 回答