2016-04-05 16 views
1

私はcqlshを使用してバッチクエリでデータを追加していますが、 "-e"フラグを使用してクエリでデータをロードできます"-f"フラグを使用したファイルからではありません。ファイルはローカルで、カサンドラは遠隔地であるからだと思う。下記の詳細:CQLSHで "-f"フラグを使用してquery.cqlファイルを実行する際の問題

これは私のクエリのサンプルでは、​​(明らかに挿入する複数の行がある):

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.cql)にクエリを保存し、以下のように呼び出した場合、私は次のような出力が得られます。

>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」フラグを指定してコマンドを実行できるようにしたいが、どうやって間違っているのか分からない。

答えて

1

ローカル cqlshクライアントを実行しているので、ローカルquery.cqlファイルにアクセスできるはずです。

BEGIN BATCHAPPLY BATCHを削除し、ちょうどquery.cqlで2つのINSERT文を聞かせて、もう一度再試行してください。データを挿入する

もう一つの解決策は、迅速CSVファイルを提供してcqlshCOPYコマンドを使用することです。このブログ記事を読む:1行につき1つのcqlsh -e '...'を生成することにより、http://www.datastax.com/dev/blog/new-features-in-cqlsh-copy

スクリプト挿入が可能であるが、それは

+0

おかげdoanduyhai恐ろしく遅くなります。 'BEGIN BATCH'と' APPLY BATCH'文を削除することで問題は解決しました。 ** COPY **コマンドを見ていきますが、** csv **ファイルに必要な特定のフォーマットがあるかどうか知っていますか? –

+0

cqlsh COPYコマンドは、CSVフォーマットに関して非常に柔軟です。 ** cqlsh **の中に 'help COPY'と入力するだけで、利用可能なすべてのオプションがリストされます – doanduyhai

関連する問題