如何在cassandra中定义动态列族

Bal*_*alo 7 database cql cassandra dynamic-columns

这里有人说,没有任何特殊的努力是需要获得一个动态的列族.但是当我尝试为未定义的列设置值时,我总是会遇到异常.

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

CREATE TABLE places (
   latitude double,
   longitude double,
   name text,
   tags text,
   PRIMARY KEY (latitude, longitude, name)
)
Run Code Online (Sandbox Code Playgroud)

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

现在插入这样的数据时:

INSERT INTO places ("latitude","longitude","name","tags") VALUES (49.797888,9.934771,'Test','foo,bar')
Run Code Online (Sandbox Code Playgroud)

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

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

我收到以下错误:

Bad Request: Unknown identifier website
text could not be lexed at line 1, char 21
Run Code Online (Sandbox Code Playgroud)

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

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

man*_*ang 12

CQL3支持动态列族,但您必须首先更改表模式

ALTER TABLE places ADD website varchar;
Run Code Online (Sandbox Code Playgroud)

查看1.2文档CQL深度幻灯片

  • 嗨,很困惑,有什么办法可以即时创建列吗? (2认同)

rs_*_*atl 7

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