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

use*_*und 16 cql cassandra cql3 datastax

我试图从这里运行以下示例

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

但是,当我尝试创建user_profiles表时,我收到以下错误:

InvalidRequest: code=2200 [Invalid query] message="Non-frozen collections are not
allowed inside collections: map<text, address>
Run Code Online (Sandbox Code Playgroud)

有关为什么会发生这种情况的任何想法?

Aar*_*ron 15

我正在运行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>>
  );
Run Code Online (Sandbox Code Playgroud)

冻结是UDT(现在)必需的,因为它将它们序列化为单个值.您可以使用类似的更好的示例,即用户定义类型文档中的示例.试一试.


Soi*_*oid 10

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

mymap map<bigint, string> 
Run Code Online (Sandbox Code Playgroud)

我从谷歌跟踪这个stackoverflow线程,我认为这些信息可以为他们节省几分钟的时间.


Ste*_*ski 8

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