【云圖說】第132期 小云妹帶您快速玩轉RDS實例操作(2)——刪除與退訂
1858
2025-03-31
copy是cqlsh中的邏輯導入導出命令。包括兩個命令COPY TO / COPY FROM.使用這組命令可以在Cassandra與其他RDBMS或Cassandra之間遷移數據。目前已經支持csv, json文件格式以及標準輸出和輸入。
1. 如何執行copy?
1. 執行copy時,首先要啟動cqlsh. 啟動cqlsh的方法見?如何使用cqlsh訪問Cassandra。啟動cqlsh后,接著執行copy命令。如下
1
. /cqlsh? 127.0.0.1?9042?-u?{user_name}?-p?{password}
1
COPY?cycling.cyclist_name?TO? '/home/cas/copydata' ;
2. 如果數據量很大,可以放在后臺執行。使用cqlsh的-e 參數。-e 參數用來后臺執行給定的語句,然后退出。命令如下
1
. /cqlsh? 127.0.0.1?9042?-u?{user_name}?-p?{password}?-e? "COPY?cycling.cyclist_name?TO?'/home/cas/copydata'" ;
2. COPY TO
1
. /cqlsh? 127.0.0.1?9042?-e? "COPY?cycling.cyclist_name?to?'/home/cas/copydata'"
COPY TO 常見的參數有:?NUMPROCESSES, RATEFILE, PAGESIZE, BEGINTOKEN, ENDTOKEN, MAXATTEMPTS, MAXOUTPUTSIZE; 新增的參數有:?RESULTFILE, DATAFORMATS, WHERECONDITION.重點介紹常見和新增的參數,關于其他COPY TO的參數可以參考Cassandra官網文檔:?copy-to
1.?`file name`?導出時,可以指定文件名稱為目錄, 也可以指定文件名稱為文件。默認導出到文件。如果指定導出文件為存在的目錄時,將會按照range范圍導出到目錄下的不同的文件中,如果某一個range范圍導出沒有數據,則不會生成文件。如果指定的文件名是文件,那將會導出到指定的文件中。如果文件不存在,則新創建該文件。
1
. /cqlsh? 127.0.0.1?9042?-e? "COPY?cycling.cyclist_name?to?'/home/cas/copydata'"
1
. /cqlsh? 127.0.0.1?9042?-e? "COPY?cycling.cyclist_name?to?'/home/cas/copydata/cycling.cyclist_name'"
2.?`NUMPROCESSES`?導出的線程數。在導出時,會將range范圍進行細分。導出的線程數越多,細分range的范圍數也就越多。但當線程數太多的時候,容易對服務端造成壓力,造成導出失敗。所以要選擇一個合適的線程數進行導出,默認的線程個數是(CPU核數 - 1)
3.??`RATEFILE`?速率文件。指定文件路徑后,會打印導出過程的瞬時速率,可以用來評價導出的性能。
4.??`PAGESIZE`?在一次page查詢中。獲取的row數。 默認為 1000。 建議不要設的調小。設置太小會影響導出性能。
5.??`BEGINTOKEN, ENDTOKEN`?執行要導出的range范圍。默認是全部數據導出。
6.??`MAXATTEMPTS`?每一個查詢重試的次數。如果某次查詢達到最大重試次數,那么導出將會直接失敗。
7.??`MAXOUTPUTSIZE`?每一個導出文件中的最大的行數。如果導出數據大于這個值。將會輪轉生成另一個文件。默認是不限制的。
1
. /cqlsh? 127.0.0.1?9042?-e? "COPY?cycling.cyclist_name?to?'/home/cas/copydata/cycling.cyclist_name'?with?MAXOUTPUTSIZE=1"
8.??`RESULTFILE`?導出結果文件路徑,如果不設置。默認生成在當前執行目錄下。如果執行目錄中存在之前的結果文件,將會重命名之前的結果文件。導出結果的內容主要包括:導出成功與否,總共導出的行數和速率,導出的range范圍數,以及成功失敗的range范圍數,并展示每一個range范圍的結果和導出的行數。
9.?`DATAFORMATS`?導出的數據格式。取值為csv, json。默認為csv格式。指定為json時,導出為json格式的數據。
10.?`WHERECONDITION`?導出的查詢條件。支持查詢條件的導出。對于非主鍵列,如果通過索引來查詢,提高導出性能。
1.?wherecondition 格式如下?`[key(operators)value,key(operators)value...]`
2.?operators 支持?`[">=", "<=", ">", "<", "="]`,例如:?`'keyspace_name=system,table_name>=local'`
3.?如果value中包含有特殊字符,比如保留字符 【" ,><=’】, 那么需要給字符加上雙引號,例如:`'keyspace_name=system,table_name>="loc>=al"'`
一個完整的COPY TO例子:
1
nohup? . /cqlsh? 127.0.0.1?9042?--request-timeout=3600?--debug?-e? "COPY?nihao.sz_user?to?'/home/cas/copydata'?with?WHERECONDITION='update_timestamp=1'?NUMPROCESSES=12?AND?RATEFILE='rate.txt'?AND?RESULTFILE='export_result'?AND?dataformats='json';"?? > export .log?2>&1?&
3. COPY FROM
1
COPY?