Cassandra copy命令使用指南

举报
geminidb_fans 发表于 2020/04/29 11:27:10 2020/04/29
【摘要】 copy是cqlsh中的逻辑导入导出命令。包括两个命令COPY TO / COPY FROM.使用这组命令可以在Cassandra与其他RDBMS或Cassandra之间迁移数据。目前已经支持csv, json文件格式以及标准输出和输入。 1. 如何执行copy? 1. 执行copy时,首先要启动cqlsh. 启动cqlsh的方法见 如何使用cqlsh访问Cassandra。启动cql...

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' ;

image.png

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'"

image.png

1
. /cqlsh  127.0.0.1 9042 -e  "COPY cycling.cyclist_name to '/home/cas/copydata/cycling.cyclist_name'"

image.png

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"

image.png

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 &



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。