Apache Cassandra cqlsh --keyspace被忽略

时间:2018-07-03 20:30:07

标签: docker cassandra cqlsh

我们正在使用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的服务器位于不同的服务器上。工作正常时,它们位于同一服务器上。

1 个答案:

答案 0 :(得分:0)

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