Cassandra:如何在超级列族中创建列?

Joh*_*kya 4 cassandra

我在模式文件中定义我的数据库模型,以便稍后从头开始轻松创建键空间和列族.我查看了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}
];
Run Code Online (Sandbox Code Playgroud)

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

nic*_*ley 7

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

create column family User
with column_type = 'Super' 
and comparator = UTF8Type
and default_validation_class = UTF8Type;
Run Code Online (Sandbox Code Playgroud)

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

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

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}
];
Run Code Online (Sandbox Code Playgroud)

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

  • 但是,是的,不可能声明超级列的名称.Cassandra仅提供声明列名的功能,以便验证列值或在该列名称上创建索引.正如我之前所说,你不能用超级列做任何一件事. (2认同)