在 CQLSH 中使用"-f"标志运行 query.cql 文件时出现问题



我使用cqlsh通过BATCH查询将数据添加到Cassandra中,我可以使用"-e"标志通过查询加载数据,但不能使用"-f"标志从文件加载数据。我认为这是因为该文件是本地的,而Cassandra是远程的。详细信息如下:

这是我的查询示例(显然还有更多的行要插入):

BEGIN BATCH;
INSERT INTO keyspace.table (id, field1) VALUES ('1','value1');
INSERT INTO keyspace.table (id, field1) VALUES ('2','value2');
APPLY BATCH;

如果我通过"-e"标志输入查询,那么它没有问题:

>cqlsh -e "BEGIN BATCH; INSERT INTO keyspace.table (id, field1) VALUES ('1','value1'); INSERT INTO keyspace.table (id, field1) VALUES ('2','value2'); APPLY BATCH;" -u username -p password -k keyspace 99.99.99.99

但是,如果我将查询保存到一个文本文件(query.ccl)中,并按如下方式调用,我会得到以下输出:

>cqlsh -f query.cql -u username -p password -k keyspace 99.99.99.99
Using 3 child processes
Starting copy of keyspace.table with columns ['id', 'field1'].
Processed: 0 rows; Rate:       0 rows/s; Avg. rate:       0 rows/s
0 rows imported from 0 files in 0.076 seconds (0 skipped).

Cassandra显然接受了命令,但没有读取文件,我猜这是因为Cassandra位于远程服务器上,而文件位于本地。我使用的Cassandra实例是其他用户的托管服务,所以我没有权限访问它来将文件复制到文件夹中。

如何在我只能访问CLI的Cassandra远程实例上运行此查询?

我希望能够使用另一个工具来构建query.cql文件,并让一个批处理作业运行带有"-f"标志的命令,但我不知道怎么会出错。

您正在执行本地cqlsh客户端,因此它应该能够访问您的本地query.cql文件。

尝试删除BEGIN BATCHAPPLY BATCH,只让query.cql中的2个INSERT语句,然后重试。

另一种快速插入数据的解决方案是提供csv文件,并在cqlsh中使用COPY命令。阅读此博客文章:http://www.datastax.com/dev/blog/new-features-in-cqlsh-copy

通过每行生成一个cqlsh -e '...'来编写插入脚本是可行的,但速度会非常慢

最新更新