【问题标题】:Apache Cassandra cqlsh --keyspace being ignoredApache Cassandra cqlsh --keyspace 被忽略
【发布时间】:2018-12-12 05:33:41
【问题描述】:

我们使用的是 Apache Cassandra 3.11.2,cqlsh 5.0.1。我通过将文件传递给cqlsh 命令来重新创建和填充一些表,其中我有多个SOURCE 语句用于我正在创建和填充的各种表。这些文件都没有表的硬编码键空间,因此我在命令行中使用--keyspace 参数将它们传递给它们。

SOURCE 'favorite-destinations-table-drop.cql'; SOURCE 'favorite-destinations-table-create.cql'; ...

奇怪的是,如果我在我的 Windows 机器上本地运行它,它工作正常。如果我在 Cassandra Docker 容器上本地运行它,它也可以正常工作。但是,如果我从安装了cqlsh(也是版本 5.0.1)的 Linux Docker 容器运行它,与安装了 Cassandra 3.11.2 的 Docker 容器通信,我会收到错误消息,指出我没有指定键空间,即使它在命令行上。我什至在源 CQL 文件的文件中放了一个 USE 语句,它仍然给我这个错误:

command = cqlsh --cqlversion 3.4.4 --file w2_int_test-database-init-populate.cql --keyspace w2_integration_test cassandra-0.cassandra.w3-rre-system.svc.cluster.local 9042 favorite-destinations-table-drop.cql:2:InvalidRequest: Error from server: code=2200 [Invalid query] message="No keyspace has been specified. USE a keyspace, or explicitly specify keyspace.tablename" favorite-destinations-table-create.cql:16:InvalidRequest: Error from server: code=2200 [Invalid query] message="No keyspace has been specified. USE a keyspace, or explicitly specify keyspace.tablename" ...

我们不得不将--cqlversion 3.4.4 添加到命令行,因为我们遇到了奇怪的版本不匹配错误。所以我不确定这是否有任何关系。

似乎唯一不同的是,在失败的执行中,服务器位于与我们运行 cqlsh 的服务器不同的服务器上。当它工作时,它们在同一台服务器上。

【问题讨论】:

  • 您是否尝试过更改 *.cql 文件?
  • 你需要修改内部cql文件..要么放USE,要么指定keyspac.table
  • 谢谢,我在SOURCE 语句之前尝试了USE,但没有奏效。我不想硬编码源 CQL 文件中的键空间,因为那样我只能将它们用于一个键空间,而我们使用多个。

标签: docker cassandra cqlsh


【解决方案1】:

我解决这个问题的唯一方法是创建一个脚本来读取要源文件的列表,并使用键空间为每个文件运行cqlsh,而不对源 CQL 文件中的键空间进行硬编码在命令行中指定。在我看来,SOURCE 在远程环境中效果不佳(因为这一切都在本地工作)。

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 2015-08-25
    • 2020-02-06
    • 2015-05-21
    • 2017-01-09
    • 2016-10-02
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多