2017-03-10 37 views
0

最近在我的项目中,Cassandra的驱动程序升级从2.0.4升级到3.1.0。我发现insert语句不适用于具有'json'作为列名的表。以前的cassandra版本使用相同的插入语句。使用json作为cassandra表中的列名在cassandra升级后不起作用

样品插入语句:

INSERT INTO TABLE_NAME(姓名,ID,JSON)的值( “AAA”, “123”,“{ “显示顺序”: “1”, “产品ID”: “QWERTY”}“);

当我试图在Datastax DevCenter查询,我收到错误为“没有可行的替代方案,在输入‘JSON’

这是否意味着,我们要改变insert语句?

请帮忙!

编辑: 我在示例查询中犯了一个错误,json类型不是问题。当我启用调试时,我发现问题是与时间戳列。 我没有提到在我的例子中,因为我认为json可能是原因。

这是因为最近的驱动程序更新到3.1.0,因为相同的查询现在不起作用。 当我尝试修复它时,我无法在3.1.0版本中找到时间戳转换器函数(toTimestamp)或dateOf()函数。 我只看到了现在(),但它只返回类型timeuuid。

有没有我可以转换当前日期为timestamp任何其他方式?

回答

0

这不是因为JSON领域,您的插入格式随附单引号不正确

使用字符串:

[email protected]:test> insert into test_json (name, id, json) values ('AAA', '123', '{"display-order":"1","product-id":"QWERTY"}'); 

[email protected]:test> SELECT * FROM test_json ; 

id | json          | name 
-----+---------------------------------------------+------ 
123 | {"display-order":"1","product-id":"QWERTY"} | AAA 

或双美元符号为封装与字符串引号,反斜杠,或者通常会需要其他字符转义

[email protected]:test> insert into test_json (name, id, json) values ('AAA', '123', $${"display-order":"1","product-id":"QWERTY"}$$); 
[email protected]:test> SELECT * FROM test_json ; 

id | json          | name 
-----+---------------------------------------------+------ 
123 | {"display-order":"1","product-id":"QWERTY"} | AAA 

顺便说一句,如果你想插入当前时间戳使用dateof(now())或者如果应用了Java使用new Date()

+0

感谢@Ashraful的答复。请在原始问题中找到我的编辑。 –

+0

@ek_cool如果你想插入当前时间戳记使用dateof(now())或者如果你使用java使用新的Date() –