【问题标题】:Same query doesn't run on restored Cassandra database相同的查询不在恢复的 Cassandra 数据库上运行
【发布时间】:2017-11-28 19:15:58
【问题描述】:

我正在处理 Cassandra 迁移。 我在 Ubuntu 14.04 上构建了一个新的 Cassandra 集群 - Cassandra 2.1.8。数据库已从快照中恢复。 源 Cassandra 集群也是 2.1.8 版本。

我正面临这个奇怪的问题。 在原始集群上,我可以使用 cqlsh 运行以下查询而不会出现任何错误。 cqlsh 是 5.0.1 版。 SELECT * FROM "featureitems" WHERE "categoryId" = 2 LIMIT 100;

在新集群上,相同的查询会引发错误: InvalidRequest: code=2200 [Invalid query] message="Undefined name categoryId in where clause ('categoryId = 2')"

但是当我删除双引号时它运行得很好 SELECT * FROM featureitems WHERE categoryId = 2 LIMIT 100;

它看起来像一些配置问题,但我不知道在哪里寻找。任何这种意义上的建议都值得赞赏。

【问题讨论】:

    标签: cassandra cassandra-2.0 cql3 cqlsh


    【解决方案1】:

    如果没有在双引号中提供,Cassandra 会将所有列/表/键空间名称转换为小写。

    因此,如果您需要在列/表/键空间名称中使用大写字符,请使用双引号。

    您可以使用DESC TABLE featureitems 命令来描述表格。

    在您的第一个查询中,您将 categoryId 括在双引号中,因此它会查找带有大写 I 的列。

    在您的第二个查询中,categoryId 没有用双引号括起来,因此它将转换为 categoryid...,它存在于表中,因此可以工作。

    【讨论】:

    • 我将原始表定义与新表定义进行了比较,我可以看到新表名被转换为小写,这导致了问题。这是我需要研究的表空间创建脚本的问题。感谢您的帮助。
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多