2015-10-28 4 views
2

Ma structure familiale de la colonne est:insertion de données Cassandra + + set <FROZEN <map <text,text> >>

create table mykeyspc."test" (
id int PRIMARY KEY, 
val set<frozen<map<text,text>>> 
); 

quand je suis l'insertion de données par shell CQL

insert into "test" JSON '{"id":1,"val":{"ab","bc"}}'; 
Error: INVALIDREQUEST: code=2200 [Invalid query] message="Counld not decode JSon string as 
map:org.codehaus.jackson.jsonParseException: Unexpected character{'{'{ code 123}) 

ou

insert into "test" (id,val) values (1,{{'ab','bc'},{'sdf','name'}}); 
Error: INVALIDREQUEST: code=2200 [Invalid query] message="INVALID SET LITERAL FOR 
VAL:value{'a','b'} is not of type frozen<map<text,text>>" 
+0

Quelle version de Cassandra utilisez-vous? Je demande seulement, parce que la question est étiquetée "cassandra-2.0", mais la définition d'une table avec un ensemble n'est valide que dans 2.1+. – Aaron

+1

Ma conjecture est 2.2+ puisque le serveur tente d'analyser le JSON dans la première déclaration. –

+0

Bon appel. Merci @Adam! – Aaron

Répondre

4

Dans votre second exemple, essayez de séparer la clé/les valeurs de la carte avec les deux-points : au lieu des virgules .

[email protected]:stackoverflow> INSERT INTO mapOfSet (id,val) 
          VALUES (1,{{'ab':'bc'},{'sdf':'name'}}); 
[email protected]:stackoverflow> SELECT * FROm mapofset WHERE id=1; 

id | val 
----+--------------------------------- 
    1 | {{'ab': 'bc'}, {'sdf': 'name'}} 

(1 rows)