【问题标题】:Cassandra: How to create column in a super column family?Cassandra:如何在超级列族中创建列?
【发布时间】:2011-12-01 22:47:36
【问题描述】:

我在模式文件中定义我的数据库模型,以便以后轻松地从头开始创建键空间和列族。我查看了 Cassandra 发行版附带的 schema-sample.txt,它展示了如何使用 column_metadata 创建标准列族,例如:

create column family User
with comparator = UTF8Type
and default_validation_class = UTF8Type
and column_metadata = [
         {column_name : name, validation_class : UTF8Type}
         {column_name : username, validation_class : UTF8Type}
         {column_name : City, validation_class : UTF8Type}
];

但是如何使用类似的语法来创建超级列族?我想定义我将放在超级列族中的超级列的列名。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    要创建超级列族,您只需添加 column_type 属性:

    create column family User
    with column_type = 'Super' 
    and comparator = UTF8Type
    and default_validation_class = UTF8Type;
    

    您无法在元数据中定义超级列的名称。元数据用于验证列值或创建索引。由于您无法验证超级列的值(值是更多列)并且您无法在超级列上创建索引,因此没有理由为它们设置元数据。

    您可以使用超级列创建有关子列的元数据,但它将应用于行中的所有超级列。例如:

    create column family User
    with column_type = 'Super'
    and comparator = UTF8Type
    and default_validation_class = UTF8Type
    and column_metadata = [
             {column_name : name, validation_class : UTF8Type}
             {column_name : age, validation_class : LongType}
    ];
    

    在这个超级列族中,任何名为“name”的子列都必须是 UTF8,任何名为 age 的子列都必须是 long。

    【讨论】:

    • 我知道我必须摆脱旧的关系思维方式,而且我可能不完全理解超级列。但在你的第二个例子中,这不是一个超级列族,对吧?但是你说:“在这个超级列族中,任何名为 'name' 的子列都必须是 UTF8,而任何名为 age 的子列都必须是长的。”。所以不能在 schema 文件中声明超列的名称?
    • 糟糕,我忘记在创建语句中添加列类型。我将编辑回复并将其添加进去。
    • 但是是的,不能声明超级列的名称。 Cassandra 仅提供声明列名的功能,以便验证列值或在该列名上创建索引。正如我之前所说,你不能用超级列来做这两件事。
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2014-11-23
    相关资源
    最近更新 更多