2015-08-11 13 views
10

Ich versuche, das folgende Beispiel aus hereNicht gefrorene Sammlungen und benutzerdefinierte Typen auf Cassandra 2.1.8

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> 
); 

jedoch zu laufen, wenn ich versuche, die user_profiles Tabelle zu erstellen, erhalte ich folgende Fehlermeldung:

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

Irgendwelche Gedanken darüber, warum das passieren könnte?

Antwort

10

Ich bin 2.1.8 ausgeführt und ich bekomme die gleiche Fehlermeldung. Um dies zu beheben, müssen Sie das frozen Stichwort:

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

Frozen ist notwendig für UDTs (bis jetzt), wie es sie in einen einzigen Wert serialisiert. Ein ähnliches, besseres Beispiel für Sie könnte der in der User Defined Type documentation sein. Probieren Sie es aus.

7

Nicht eingefrorene UDTs werden noch nicht unterstützt. Der Grund für die Aufforderung an den Benutzer, dieses Schlüsselwort für jeden UDT explizit anzugeben, besteht darin, mutable UDTs in 3.x einzuführen, ohne den vorhandenen Code zu unterbrechen.

+0

Danke für die Klärung, Stefan! Ich dachte, es sei spezifisch für Sammlungen; Also habe ich meine Antwort auch korrigiert. – Aaron

6

Ich war immer diese Meldung, wenn ich versehentlich verwendet „string“ anstelle von „Text“ in einer cassandra Karte, wie:

mymap map<bigint, string> 

Ich folgte diesen Stackoverflow Thread von Google und ich dachte, diese Informationen jemanden retten könnten ein paar Minuten ihrer Zeit.

+0

Es hat einfach getan. Vielen Dank. –