【问题标题】:Using json as column name in cassandra table does not work after cassandra upgrade在 cassandra 升级后,使用 json 作为 cassandra 表中的列名不起作用
【发布时间】:2017-03-10 04:04:21
【问题描述】:

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

插入语句示例:

插入 table_name (name, id, json) 值 ("AAA", "123", '{"display-order":"1","product-id":"QWERTY"}');

当我在 Datastax DevCenter 中尝试查询时,我收到错误消息“在输入 'json' 处没有可行的替代方案

这是否意味着我们必须更改插入语句?

请帮忙!

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

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

还有其他方法可以将当前日期转换为时间戳吗?

【问题讨论】:

    标签: json database cassandra insert upgrade


    【解决方案1】:

    不是因为json字段,你的插入格式不正确

    使用单引号括起来的字符串:

    cassandra@cqlsh:test> insert into test_json  (name, id, json) values ('AAA', '123', '{"display-order":"1","product-id":"QWERTY"}');
    
    cassandra@cqlsh:test> SELECT * FROM test_json ;
    
     id  | json                                        | name
    -----+---------------------------------------------+------
     123 | {"display-order":"1","product-id":"QWERTY"} |  AAA
    

    或用双美元符号将字符串括在引号、反斜杠或其他通常需要转义的字符中

    cassandra@cqlsh:test> insert into test_json  (name, id, json) values ('AAA', '123', $${"display-order":"1","product-id":"QWERTY"}$$);
    cassandra@cqlsh:test> SELECT * FROM test_json ;
    
     id  | json                                        | name
    -----+---------------------------------------------+------
     123 | {"display-order":"1","product-id":"QWERTY"} |  AAA
    

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

    【讨论】:

    • 感谢@Ashraful 的回复。请在原始问题中找到我的编辑。
    • @ek_cool 如果你想插入当前时间戳使用 dateof(now()) 或者如果你使用 java 使用 new Date()
    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 2019-02-24
    • 2019-01-30
    • 2016-05-01
    • 2016-06-11
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    相关资源
    最近更新 更多