3.5 数据管理
3.5.1 使用 COPY 命令导出导入数据
COPY是cqlsh中的逻辑导出导入命令,包括COPY TO和COPY FROM两个命令。
COPY TO支持将数据从表中导出到csv、json、parquet、orc格式的文件中。
● 导出文件格式为csv时,需要每行都写入目标文件中的一行,其中的字段由定界符 分隔。
● 如果未指定列名,则导出所有字段。
● 如果需要跳过部分列,需要指定列列表。
COPY FROM支持将数据从csv文件和json文件导入到现有表中。
● 源文件中的每一行都作为一行导入。
● 数据集中的所有行必须包含相同数量的字段,并且在PRIMARY KEY字段中必须具 有值,该过程将验证PRIMARY KEY并更新现有记录。
● 如果HEADER为False并且没有指定列名,则以确定的顺序导入字段。指定列名 后,将按该顺序导入字段,缺少和空字段设置为null。
● 源文件不能具有比目标表更多的字段,但是可以具有更少的字段。
● 仅使用COPY FROM导入数据时,数据集必须少于200万行。
使用须知
● 建议您尽量选择在业务低峰期导出导入数据,避免在该过程中对业务造成影响。
● 需要获取最新的二进制包,具体地址请参见下载二进制包。
COPY 语法
● COPY TO命令
COPY table_name [( column_list )] TO 'file_name' [, 'file2_name', ...] | STDOUT [WITH option = 'value' [ADN ...]]
● COPY FROM命令
COPY table_name [( column_list )] FROM 'file_name' [, 'file2_name', ...] | STDIN [WITH option = 'value' [ADN ...]]
说明
COPY支持一个或多个以逗号分隔的文件名或python glob表达式的列表。
上述COPY命令中出现的一些常见语法符号可以参见表3-6的约定。
<datatype1,dat
atype2> 有序列表set,列出,映射或元组。尖括号(< >)将数据类型包 含在集合,列表,地图或元组中。用逗号分隔数据类型。
cql_statement; 结束CQL语句。分号( ; )终止所有CQL语句。
[--] 使用两个连字符(--)将命令行选项与命令参数分开 。当参数可 能误认为命令行选项时,此语法很有用。
' <schema> ...
</schema> ' 仅搜索CQL:单引号( ' )包围整个XML模式声明。
@xml_entity='x
ml_entity_type' 仅搜索CQL:标识实体和文字值以覆盖模式和solrConfig文件中的 XML元素。
-命令
ESCAPE 转义使用QUOTE字符的单
个字符。 \
-TO/FRO M
HEADER 布尔值(true | false),
指示第一行上的列名称。
SEP decimal(大数)值的分
隔字符。 英文句号.
LE 布尔值指示True和False。
该值不区分大小写,例 如:yes,no和YES,NO 相同。
True,False
-命令 dstat,dstat -lvrn 10观察CPU 空闲时间,如果
LE 指定一个cqlshrc配置文件 以设置WITH选项。
RATEFILE 将输出统计信息打印到此 文件。
ORIGIN 需要导入导出的数据库是 否为开源Cassandra。
● 如果是开源 Cassandra,则为 True。
● 如果是GaussDB(for Cassandra),则为 False。
False
-命令 类型
参数 描述 默认值 使用建议
FROM CHUNKSI
ZE 块大小传递给工作进程。 5000 该参数是从
FROM INGESTR
ATE 每秒的近似导入速率。 100000 INGESTRATE是 feeder进程发送
FROM MAXBAT
CHSIZE 导入批处理的最大大小。 20 该值的设置可以 尽可能大,但不 要超过上限。
● MAXBATCHSI ZE*单行size <
batch_size_fa 在cassandra.ya ml中进行设 置:batch_size_w arn_threshol
命令 类型
参数 描述 默认值 使用建议
FROM MINBATC
HSIZE 导入批处理的最小大小。 2 对于每一个
FROM MAXROW
S 最大行数。使用“ -1”意
味无最大限制。 -1
-FROM SKIPROW
S 要跳过的行数。 0
-FROM SKIPCOLS 以逗号分隔的要跳过的列 名称列表。
无,需自行制定
-FROM MAXPARS
EERRORS 最大全局解析错误数。使 用“ -1”意味无最大限 制。
-1
-FROM MAXINSE RTERROR 息存储在import_ ks _ table .err中,其中ks是键 空间,而table是表名。
import_ ks _ table .err
-FROM TTL 生存时间以秒为单位。默 认情况下,数据不会过 期。
3600
-TO ENCODIN
G 输出字符串类型。 UTF-8
-命令 类型
参数 描述 默认值 使用建议
TO PAGESIZE 用于获取结果的页面大
小。 1000 取值为整数,表
示获取结果的页 面大小,默认为 1000。
页面大小越大,
pagetimeout应 该越长。单行数 据量比较大时需 要调小,单行数 据量比较小时可 以适当增大该 值。该值的最佳 效果还取决于执 行机批量本地写 的能力,如果批 量本地写能力很 强(如使用华为 云obsfs),可适 当增大。
命令 类型
参数 描述 默认值 使用建议
TO PAGETIM
EOUT 页面超时以获取结果。 10 取值为整数,表
TO BEGINTO
KEN 用于导出数据的最小
命令 类型
参数 描述 默认值 使用建议
TO ENDTOKE
N 用于导出数据的最大
TO MAXREQ
UESTS 每个工作者可以并行处理
TO MAXOUT
PUTSIZE 输出文件的最大大小,以 行数为单位。 以和MAXFILESIZE同 时使用。
命令 类型
参数 描述 默认值 使用建议
TO MAXFILE
SIZE 输出文件的最大大小,以
TO dataform
ats 输出文件格式,当前如果
设置值只能选json。 无,需自行制定 -TO DATATYP
E 文件格式可选parquet或
者orc。 无,需自行制定
-TO RESULTFI
LE 导出的详细结果文件。 无,需自行制定 导出数据时建议 加上该参数以提 升统计效率。
TO wherecon
dition 导出时指定的导出条件。 无,需自行制定
-如何使用 COPY 命令导出、导入数据
下面将以具体的示例介绍从预置数据到导出数据、导入数据的完整过程。
步骤1 预置数据
1. 创建keyspace。
CREATE KEYSPACE cycling WITH replication = {'class': 'SimpleStrategy', 'replication_factor':
3};
2. 创建table。
CREATE TABLE cycling.cyclist_name ( id UUID PRIMARY KEY,
lastname text, firstname text );
3. 插入数据。
INSERT INTO cycling.cyclist_name (id, lastname, firstname) VALUES (5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 'VOS','Marianne');
INSERT INTO cycling.cyclist_name (id, lastname, firstname) VALUES (e7cd5752-bc0d-4157-a80f-7523add8dbcd, 'VAN DER BREGGEN','Anna');
INSERT INTO cycling.cyclist_name (id, lastname, firstname) VALUES (e7ae5cf3-d358-4d99-b900-85902fda9bb0, 'FRAME','Alex');
INSERT INTO cycling.cyclist_name (id, lastname, firstname) VALUES
(220844bf-4860-49d6-9a4b-6b5d3a79cbfb, 'TIRALONGO','Paolo');
INSERT INTO cycling.cyclist_name (id, lastname, firstname) VALUES (6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47, 'KRUIKSWIJK','Steven');
INSERT INTO cycling.cyclist_name (id, lastname, firstname) VALUES (fb372533-eb95-4bb4-8685-6ef61e994caa, 'MATTHEWS', 'Michael');
步骤2 从“cyclist_name”表中导出、导入数据。
1. 将“cyclist_name”表中的“id”和“lastname”列导出到CSV文件。
COPY cycling.cyclist_name (id,lastname) TO '../cyclist_lastname.csv' WITH HEADER = TRUE;
图3-60 导出成功
上述命令执行成功后,会在当前目录的上一层目录中创建
“cyclist_lastname.csv”文件。如果该文件已经存在,则会将其覆盖。
2. 将“cyclist_name”表中的“id”和“first name”列导出到另一个CSV文件。
COPY cycling.cyclist_name (id,firstname) TO '../cyclist_firstname.csv' WITH HEADER = TRUE;
图3-61 导出成功
上述命令执行成功后,会在当前目录的上一层目录中创建
“cyclist_firstname.csv”文件。如果该文件已经存在,则会将其覆盖。
3. 将“cyclist_name”表中的数据删除。
TRUNCATE cycling.cyclist_name;
4. 查看此时表中无数据。
SELECT * FROM cycling.cyclist_name ; 图3-62 查询数据
5. 导入“cyclist_firstname.csv”文件。
COPY cycling.cyclist_name (id,firstname) FROM '../cyclist_firstname.csv' WITH HEADER = TRUE;
图3-63 导入成功
6. 校验新导入的数据。
SELECT * FROM cycling.cyclist_name;
图3-64 导入成功
7. 导入“cyclist_lastname.csv”文件。
COPY cycling.cyclist_name (id,lastname) FROM '../cyclist_lastname.csv' WITH HEADER = TRUE;
图3-65 导入数据
8. 校验数据是否更新。
SELECT * FROM cycling.cyclist_name;
查询结果显示,
图3-66 导入成功
----结束
相关问题
导入数据时,报错field larger than field limit (131072)