7

据说,无需特别努力即可获得动态列族。但是当我尝试为未定义的列设置值时,我总是遇到异常。

我创建了一个这样的列族:

CREATE TABLE places (
   latitude double,
   longitude double,
   name text,
   tags text,
   PRIMARY KEY (latitude, longitude, name)
)

顺便说一句:我必须定义标签列。有人可以解释一下为什么吗?也许是因为所有其他列都是索引的一部分?

现在插入这样的数据时:

INSERT INTO places ("latitude","longitude","name","tags") VALUES (49.797888,9.934771,'Test','foo,bar')

它工作得很好!但是当我尝试时:

INSERT INTO places ("latitude","longitude","name","tags","website") VALUES (49.797888,9.934771,'Test','foo,bar','test.de')

我收到以下错误:

Bad Request: Unknown identifier website
text could not be lexed at line 1, char 21

需要哪些更改才能动态添加列?

我直接在服务器上使用带有 CQL3 的 Cassandra 1.1.9 和 cqlsh。

4

2 回答 2

12

CQL3 支持动态列族,但您必须先更改表架构

ALTER TABLE places ADD website varchar;

查看1.2 文档CQL 深度幻灯片

于 2013-01-23T01:23:25.967 回答
7

CQL3 要求存在列元数据。CQL3 实际上是对底层存储行的抽象,因此它不是一对一的。如果您想使用动态列名(并且它们有很多出色的用例),请使用传统的 Thrift 接口(通过您选择的客户端库)。这将使您完全控制存储的内容。

于 2013-01-22T14:40:09.737 回答