【问题标题】:No viable alternative at input 'JSON' exception in cqlsh. Not able to insert JSON in Cassandra table在 cqlsh 中输入“JSON”异常时没有可行的替代方案。无法在 Cassandra 表中插入 JSON
【发布时间】:2016-11-28 15:34:24
【问题描述】:

我正在尝试使用 shell 和 Java 代码在 Cassandra 表中插入 JSON,但出现此错误: 输入 JSON 没有可行的替代方案

  1. Cassandra 版本: [cqlsh 4.1.1 |卡桑德拉 2.0.12 | CQL 规范 3.1.1 | Thrift 协议 19.39.0]
  2. 表创建脚本 CREATE TABLE users(id int PRIMARY KEY, age int, state text);
  3. 插入脚本 插入用户 JSON '{"id": 888, "age": 42, "state": "TX"}';
  4. 使用 Java 插入的类似代码: String cqlStatement = "INSERT INTO users JSON '{\"id\":888 , \"age\":21 ,\"state\":\"TX\"}'"; cassandraTemplate.execute(cqlStatement);

在这两种情况下都出现异常: 输入“JSON”没有可行的替代方案 5. 我需要在 Cassandra 中设置一些东西才能在终端中接受 JSON 命令吗?

【问题讨论】:

    标签: cqlsh


    【解决方案1】:

    找到适用于 Cassandra 2.0.12 的问题的答案

    先决条件:

    1. 要插入到表中的 JSON 的缩小版本
    2. 链接 http://www.httputility.net/json-minifier.aspx 可用于缩小 JSON(转到此站点并复制 JSON
      内容,缩小并复制输出)
    3. 检查任何单引号('),将其替换为双引号('')
    4. 确保字符串没有终止
    5. JSon 应该插入到 text 列中

    在给定的示例中,创建了一个名为employee 的表,它有4 列。 Eid 一个整数值,ename 一个文本值,ephonenumber 作为文本列表,eaddress 作为文本。 eaddress 是应该插入 JSON 的列

    执行步骤:

    1. 创建一个表,比如说 employee,其中包含 4 列 eid、ename、ephonenumber、eaddress 和主键 eid

    在 CQL 终端中执行的命令:

    创建表employee(eid int, ename text, ephonenumber list, eaddress text, primary key(eid));

    1. 在employee表中插入一行,ephonenumber为list,eaddress为json

      在 CQL 终端中执行的命令

    插入员工(eid、ename、ephonenumber、eaddress)值(1、'Sourav'、['7773330000'、'5550003333']、'{"office":"197 - ITPL - Bangalore", "home":"196 -Thubarahalli - 班加罗尔"}');

    1. 使用选择查询检查是否已插入 JSON 字符串

    从员工中选择 *

    【讨论】:

      【解决方案2】:

      在您的 2.0.12 版本中不可能。看起来 Cassandra 2.2 是支持“INSERT INTO users JSON ...”的最低版本。

      insert JSON String in Apache-Cassandra 0.8.2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-21
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 2018-07-03
        • 2015-11-14
        • 1970-01-01
        相关资源
        最近更新 更多