Dictionary 如何创建嵌套集合映射<;文本、列表<;文本>&燃气轮机;输入cassandra数据库2.2.1 创建表tbl\u主值( dbid int主键, 用户\u dbid int,注册\u dbid int, 模块_dbid int, 字段值映射, 创建日期时间戳, 修改的_日期时间戳);

Dictionary 如何创建嵌套集合映射<;文本、列表<;文本>&燃气轮机;输入cassandra数据库2.2.1 创建表tbl\u主值( dbid int主键, 用户\u dbid int,注册\u dbid int, 模块_dbid int, 字段值映射, 创建日期时间戳, 修改的_日期时间戳);,dictionary,collections,cassandra,nested,cql3,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[无效查询]

它返回以下错误:

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[无效查询]
message=“集合:映射中不允许使用非冻结集合”
集合内部不允许使用非冻结集合:映射>

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

字段\u值冻结,

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

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

fields_value frozen<map<text, list<text>>>,
创建表tbl\u主值(
dbid int主键,
用户\u dbid int,注册\u dbid int,
模块_dbid int,
字段值映射,
创建日期时间戳,
修改的_日期时间戳);
如果使用Map存储和检索信息,而不更新行,则可以将其声明为:

    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);
冻结
记住,冻结关键字不允许您更新该实体并将其存储为blob类型。 有关更新的说明,请阅读此处:


你的脚本中有一种类型:fields\u value map>@doanduyhai我也看到了。结果证明他语法正确,但StackOverflow编辑器错误地解释了他的尖括号。没关系,但无法搜索列表的值。如何从映射中查询列表并检查它是否包含值?
    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);
    frozen<map<text, list<text>>>