2015-08-11 12 views
10

Sto cercando di eseguire il seguente esempio da herecollezioni congelati non e tipi definiti dall'utente su 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> 
); 

Tuttavia, quando cerco di creare la tabella user_profiles, ottengo il seguente errore:

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

Qualche idea sul perché questo potrebbe accadere?

risposta

10

Sto eseguendo 2.1.8 e ottengo lo stesso messaggio di errore. Per risolvere questo problema, è necessario la parola chiave frozen:

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

Frozen è necessario per UDT (per ora) in quanto li serializza in un singolo valore. Un esempio simile e migliore da seguire potrebbe essere quello nello User Defined Type documentation. Provaci.

7

Gli UDT non congelati non sono ancora supportati. La ragione per chiedere all'utente di specificare esplicitamente questa parola chiave per ogni UDT è quella di poter introdurre mutable UDTs in 3.x senza rompere il codice esistente.

+0

Grazie per aver chiarito questo, Stefan! Ho pensato che fosse specifico per le collezioni; quindi ho risolto anche la mia risposta. – Aaron

6

mi è stato sempre questo messaggio quando ho erroneamente usato "stringa" invece di "testo" in una mappa Cassandra, come:

mymap map<bigint, string> 

ho seguito questa discussione StackOverflow da google e ho pensato che questa informazione potrebbe salvare qualcuno pochi minuti del loro tempo.

+0

Ha appena fatto. Grazie. –