2016-04-05 20 views
1

我正在使用cqlsh通過BATCH查詢向Cassandra添加數據,並且可以使用「-e」標誌將查詢加載到查詢中,但是而不是使用「-f」標誌的文件。我認爲這是因爲該文件是本地的,而Cassandra是遠程的。詳情如下:在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實例是與其他用戶共同管理的服務,所以我無法訪問它將文件複製到文件夾中。

如何在只有CLI訪問權限的Cassandra遠程實例上運行此查詢?

我想能夠使用另一個工具來構建query.cql文件,並有一個批處理作業用「-f」標誌運行該命令,但我無法弄清楚我怎麼會出錯。

回答

1

您正在執行本地 cqlsh客戶端,因此它應該能夠訪問您本地的query.cql文件。

嘗試刪除BEGIN BATCHAPPLY BATCH,只是讓在query.cql 2點INSERT聲明,並再次重試。其他

一種解決方案將數據插入迅速是提供一種CSV文件,並使用內部cqlshCOPY命令。通過生成一個cqlsh -e '...'每行http://www.datastax.com/dev/blog/new-features-in-cqlsh-copy

腳本插入是可行的,但是這將是可怕的慢

+0

謝謝doanduyhai:閱讀這篇博客文章。刪除'BEGIN BATCH'和'APPLY BATCH'語句解決了這個問題。我會看看** COPY **命令,你知道是否有** csv **文件所需的特定格式? –

+0

關於CSV格式,cqlsh COPY命令非常靈活。只需在** cqlsh **中鍵入'help COPY'即可列出所有可用的選項 – doanduyhai

相關問題