Apache Cassandra cqlsh --keyspace being ignored



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

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

奇怪的是,如果我在我的 Windows 机器上本地运行它,它可以正常工作。如果我在 Cassandra Docker 容器上本地运行它,它也可以正常工作。但是,如果我从已安装cqlsh的 Linux Docker 容器(也是版本 5.0.1(运行它,与安装了 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 文件中的密钥空间进行硬编码的情况下,解决此问题的唯一方法是创建一个脚本,该脚本读取要源的文件列表,并使用命令行上指定的密钥空间为每个文件运行cqlsh。在我看来,SOURCE在远程环境中不能很好地工作(因为这在本地工作(。

最新更新