如何创建嵌套集合图<text,list <text>&gt;输入cassandra数据库2.2.1

时间:2016-01-27 11:39:33

标签: dictionary collections cassandra nested cql3

create table tbl_master_values (
  dbid int primary key,
  user_dbid int, reg_dbid int,
  module_dbid int,
  fields_value map<text,list<text>>,
  created_date timestamp,
  modified_date timestamp);

它返回此错误:

InvalidRequest: code=2200 [Invalid query] 
message="Non-frozen collections are not allowed inside collections: map<text, list<text>>"

2 个答案:

答案 0 :(得分:3)

在Cassandra中,如果您打算通过in-Cassandra查询添加或删除条目,则可以使用非冻结集合。但是当您打算在地图中使用UDT或嵌套集合时,必须将前者声明为已冻结。 例如,在您的情况下:

    create table tbl_master_values (
    dbid int primary key,
    user_dbid int, reg_dbid int,
    module_dbid int,
    fields_value map<text,frozen<list<text>>>,
    created_date timestamp,
    modified_date timestamp);

如果您使用Map存储和检索信息,而不是更新该行,则可以将其声明为:

    frozen<map<text, list<text>>>

记住冻结&lt;&gt;关键字不允许您更新该实体并将其存储为blob类型。 请阅读此处以了解有关更新的说明:

  

https://docs.datastax.com/en/cql/3.3/cql/cql_using/useInsertMap.html

答案 1 :(得分:2)

  

集合中不允许使用非冻结集合:map&gt;

Cassandra告诉您,如果不使用frozen关键字,就无法完成操作。

fields_value frozen<map<text, list<text>>>,

请记住,frozen告诉Cassandra将值视为blob,并防止修改值的各个部分。当您对冻结集合进行更改时,您正在序列化并重写存储的所有项目。因此,对于经常变化的系列来说,这可能不是一个很好的解决方案。