Cassandra 2.1.8 上的非冻结集合和用户定义类型

Non frozen collections and user defined types on Cassandra 2.1.8

我正在尝试 运行 来自 here

的以下示例
  CREATE TYPE address (
          street text,
          city text,
          zip int
      );

 CREATE TABLE user_profiles (
      login text PRIMARY KEY,
      first_name text,
      last_name text,
      email text,
      addresses map<text, address>
  );

但是,当我尝试创建 user_profiles table 时,出现以下错误:

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

关于为什么会发生这种情况有什么想法吗?

我是 运行 2.1.8,我收到同样的错误信息。要解决此问题,您需要 frozen 关键字:

 CREATE TABLE user_profiles (
      login text PRIMARY KEY,
      first_name text,
      last_name text,
      email text,
      addresses map<text, frozen <address>>
  );

Frozen is necessary for UDTs (for now) as it serializes them into a single value. A similar, better example for you to follow might be the one in the User Defined Type documentation。试一试。

尚不支持非冻结的 UDT。要求用户为每个 UDT 显式指定此关键字的原因是能够在不破坏现有代码的情况下在 3.x 中引入 mutable UDTs

当我在 cassandra 映射中错误地使用 "string" 而不是 "text" 时收到此消息,例如:

mymap map<bigint, string> 

我关注了来自 google 的这个 Whosebug 线程,我认为这些信息可以节省一些人的时间。