Cassandra copy命令使用指南
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 <table name> [(<column>, ...)] FROM <
file
name> WITH <copy option> [AND <copy option> ...]
|
COPY FROM 常见的参数有: NUMPROCESSES, MAXROWS, INGESTRATE, ERRFILE, MAXBATCHSIZE, MINBATCHSIZE, CHUNKSIZE, MAXPARSEERRORS, MAXINSERTERRORS, SKIPROWS, SKIPCOLS;新增的参数有: DATAFORMATS.重点介绍常见和新增的参数,关于其他COPY FROM参数可以参考Cassandra官网文档: copy-from
1. `file name` 导入数据时,指定导入的文件路径,可以是一个目录,或者是一个文件,或者是逗号分隔的文件名列表。如果是目录,则导入该目录下的所有文件。
2. `NUMPROCESSES` 导入的线程数
3. `MAXROWS` 导入的最大行数。默认不限制。
4. `INGESTRATE` 每一秒导入的最大行数。默认为 100000
5. `ERRFILE` 导入失败的列将放在这个文件中。
6. `MAXBATCHSIZE` 每一次batch导入的最大行数。默认为20
7. `MINBATCHSIZE` 每一次batch导入的最小行数。默认为2
8. `CHUNKSIZE` 导入主线程给子线程每次传递的行数,默认为 1000
9. `MAXPARSEERRORS` 可以忽略的语法解析错误的最大行数。默认不限制
10. `MAXINSERTERRORS` 可以忽略的插入失败的最大行数。默认为1000
11. `SKIPROWS` 导入时初始跳过的行数。默认为0,不跳过
12. `SKIPCOLS` 导入时忽略的列名,以逗号分隔。默认不忽略。
13. `DATAFORMATS` 导入的数据格式。取值为csv,json。默认为csv格式。数据为json格式时,必须指定为json。
一个完整的COPY FROM例子:
1
|
nohup
.
/cqlsh
127.0.0.1 9042 --request-timeout=3600 --debug -e
"COPY nihao.sz_user FROM '/home/cas/copydata' with NUMPROCESSES=12 AND RATEFILE='rate.txt' AND dataformats='json';"
>
import
.log 2>&1 &
|
- 点赞
- 收藏
- 关注作者
评论(0)