【问题标题】:How to define dynamic column families in cassandra如何在 cassandra 中定义动态列族
【发布时间】:2013-01-05 13:48:00
【问题描述】:

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

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

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。

【问题讨论】:

    标签: database cassandra cql dynamic-columns


    【解决方案1】:

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

    【讨论】:

    • Thrift 已被 CQL 弃用,对吗?那么,当前的最佳做法是在每次插入之前运行大量 ALTER TABLE 语句吗?
    • 最简单的方法是通过map 数据类型,它实际上在后台创建了动态列名。
    • 这是一篇关于在 FQL 中支持动态列的精彩文章:datastax.com/dev/blog/…
    【解决方案2】:

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

    ALTER TABLE places ADD website varchar;
    

    查看1.2 documentationCQL in depth 幻灯片

    【讨论】:

    • 谢谢!现在我明白了关于宽行的变化!但我不喜欢他们,但你帮了我很多。
    • 您好,我很困惑,有什么方法可以即时创建列吗?
    猜你喜欢
    • 1970-01-01
    • 2020-05-28
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多