如何创建嵌套集合映射 >输入cassandra数据库2.2.1

问题描述 投票:4回答:2
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>>"
dictionary collections cassandra nested cql3
2个回答
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>>>

请记住,冻结的<>关键字不允许您更新该实体并将其存储为blob类型。请阅读此处以获取有关更新的说明:

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


2
投票

集合中不允许使用非冻结集合:map>

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.