【问题标题】:Cassandra + data insertion + set<FROZEN<map<text,text>>>Cassandra + 数据插入 + set<FROZEN<map<text,text>>>
【发布时间】:2016-01-28 10:54:09
【问题描述】:

我的列族结构是:

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

当我通过 CQL shell 插入数据时

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

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>>"

【问题讨论】:

  • 您使用的是哪个版本的 Cassandra?我只问,因为这个问题被标记为“cassandra-2.0”,但是用set&lt;frozen&lt;map&lt;... 定义一个表只在 2.1+ 中有效。
  • 我的猜测是 2.2+,因为服务器尝试在第一条语句中解析 JSON。
  • 好电话。谢谢@Adam!
  • 感谢 Aaron 和 Adam,问题已解决。我只使用 2.1 版本。

标签: json cassandra cql3


【解决方案1】:

在您的第二个示例中,尝试使用冒号 : 而不是逗号分隔映射键/值。

aploetz@cqlsh:stackoverflow> INSERT INTO mapOfSet (id,val) 
                             VALUES (1,{{'ab':'bc'},{'sdf':'name'}});
aploetz@cqlsh:stackoverflow> SELECT * FROm mapofset WHERE id=1;

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

(1 rows)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2017-02-02
    • 2016-05-04
    • 2021-02-11
    • 2013-05-23
    • 2016-10-01
    • 1970-01-01
    相关资源
    最近更新 更多