我们正在使用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
的服务器位于不同的服务器上。工作正常时,它们位于同一服务器上。
答案 0 :(得分:0)
我解决此问题的唯一方法是,不对源CQL文件中的键空间进行硬编码,而是创建一个脚本来读取要获取的文件列表,并对每个文件运行cqlsh
在命令行上指定的键空间。在我看来,SOURCE
在远程环境中无法很好地工作(因为这一切都在本地工作)。