目录
在数字化时代,数据是驱动业务决策和创新的关键要素。数据库作为数据存储、管理和分析的核心工具,其高效、准确的数据导入功能至关重要。
GaussDB作为华为推出的高性能数据库,提供了丰富的数据导入选项,其中之一便是COPY命令。COPY命令为数据迁移、备份恢复、大数据加载等场景提供了一个高效且灵活的手段。通过COPY命令,用户可以将外部文件、数据流或其他数据源的数据快速导入到GaussDB中,从而支持业务分析、报表生成、数据挖掘等多样化需求。
通过COPY命令实现在表和文件之间拷贝。在GaussDB中,COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | STDIN }
[ [ USING ] DELIMITERS 'delimiters' ]
[ WITHOUT ESCAPING ]
[ LOG ERRORS ]
[ REJECT LIMIT 'limit' ]
[ [ WITH ] ( option [, ...] ) ]
| copy_option
| TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] )
| FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];
COPY table_name [ ( column_name [, ...] ) ]
TO { 'filename' | STDOUT }
[ [ USING ] DELIMITERS 'delimiters' ]
[ WITHOUT ESCAPING ]
[ [ WITH ] ( option [, ...] ) ]
| copy_option
| FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];
COPY query
TO { 'filename' | STDOUT }
[ WITHOUT ESCAPING ]
[ [ WITH ] ( option [, ...] ) ]
| copy_option
| FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];
1)特别说明:
2)参数说明:
COPY 属于SQL命令,导入导出的文件是在数据库服务端的进行的。且需要数据库管理员权限才可以执行,COPY对较大数据集的整体读写效率较好。
根据业务需求确定导数需求,提前做好规划,具体可参考如下步骤:
1)指定(创建)数据文件存取目录。
登录数据库服务器,切换至omm用户,在“/home/omm”目录下创建用于存放数据文件的目录,此处取名“mydata”
“su omm”
“mkdir mydata”
Tip:如果在目录操作中遇到类似“ls: cannot open directory .: Permission denied”报错,需要切换到“cd /home/omm”目录下,因为其它用户(omm是数据库用户)是不能在root目录下操作的。另外,有时候可能还需要通过“chmod”给文件或者文件夹赋权限,具体根据实际报错提示处理即可。
2)准备数据
COPY TO:如果是从库表导出数据到文件,以文件形式保存,请先确认需要被导出的库表,实际业务中以真实存在的表为准,本次为了演示临时创建测试表。
-创建测试表
DROP TABLE IF EXISTS public.test_3;
CREATE TABLE public.test_3
(
id int4,
name varchar(20),
course varchar(20),
score int4
);
--插入测试数据
INSERT INTO public.test_3 VALUES (1, 'zhangsan', '语文', 90);
INSERT INTO public.test_3 VALUES (2, 'zhangsan', '数学', 95);
INSERT INTO public.test_3 VALUES (3, 'zhangsan', '英语', 85);
INSERT INTO public.test_3 VALUES (4, 'lisi', '语文', 85);
INSERT INTO public.test_3 VALUES (5, 'lisi', '数学', 90);
INSERT INTO public.test_3 VALUES (6, 'lisi', '英语', 95);
COPY FROM:如果是从数据文件导入数据到库表,需要准备目标表和数据文件,目标表的表结构和数据文件的结构需要根据业务需求提前约定好。
--创建目标表
DROP TABLE IF EXISTS public.test_4;
CREATE TABLE public.test_4
(
id int4,
name varchar(20),
course varchar(20),
score int4
);
数据文件建议均以“.txt、.bat、.csv”等文本文件格式存储,文件分隔符以“不跟字段值重复”为原则。文件编码格式需要与数据库设置的格式统一,防止出现中文乱码。
数据文件“test_3.csv”(COPY命令相对大数据文件效率更高,此处以示意为主)
1;zhangsan;语文;90
2;zhangsan;数学;95
3;zhangsan;英语;85
1)将数据表导出到指定 TXT 文件中(默认分隔符是 tab)
COPY public.test_3 TO '/home/omm/mydata/test_3.txt';
2)将数据表导出到指定 TXT 文件中(文件指定分隔符为’;’)
COPY public.test_3 TO '/home/omm/mydata/test_3.txt' delimiter ';';
3)将查询结果集导出到指定 CSV 文件中(默认分隔符为’,’)
COPY (SELECT * FROM public.test_3 WHERE name='zhangsan') TO '/home/omm/mydata/test_3.txt' WITH CSV;
测试数据复用上文的数据文件“test_3.csv”,将其导入到测试表“public.test_4”。
COPY public.test_4 FROM '/home/omm/mydata/test_3.csv' WITH CSV;
更多信息请参考官网:
COPY_云数据库 GaussDB_主备版_3.x版本_SQL参考_SQL语法_华为云
特别说明:数据的导入导出一定是在业务的需求下进行的,其中涉及到类似脱敏(加密)、数据覆盖与被覆盖、文件存储目录管理、数据量大小及数据导入导出效率等问题,本次不做说明,如有机会后续讲解。
数据导入导出常见的应用场景常见于数据库、数据仓库和大数据平台中。
1、数据库:
2、数据仓库:
3、大数据平台:
这些场景都强调了数据导入导出的重要性,它们是确保数据流动、满足业务需求、支持决策和风险管理的基础设施。
使用COPY命令可以方便地导入数据到GaussDB。只需确保源文件的格式与数据库表结构相匹配,并正确指定文件路径,即可轻松完成数据导入。此外,GaussDB还提供了其他数据导入工具和功能,如使用GDS导入数据、使用INSERT多行插入、使用gsql元命令导入数据、ETL工具集成等,以满足不同场景下的数据导入需求。
——结束