GaussDB数据库使用COPY命令导数

目录

一、前言

二、GaussDB数据库使用COPY命令导数语法

1、语法COPY FROM

2、语法COPY TO

3、特别说明及参数示意

三、GaussDB数据库使用COPY命令导数示例

1、操作步骤

2、准备工作(示例)

3、把一个表的数据拷贝到一个文件(示例)

4、从一个数据文件拷贝数据到一个表(示例)

四、常见数据导入导出的场景

五、小结

一、前言

在数字化时代,数据是驱动业务决策和创新的关键要素。数据库作为数据存储、管理和分析的核心工具,其高效、准确的数据导入功能至关重要。

GaussDB作为华为推出的高性能数据库,提供了丰富的数据导入选项,其中之一便是COPY命令。COPY命令为数据迁移、备份恢复、大数据加载等场景提供了一个高效且灵活的手段。通过COPY命令,用户可以将外部文件、数据流或其他数据源的数据快速导入到GaussDB中,从而支持业务分析、报表生成、数据挖掘等多样化需求。

二、GaussDB数据库使用COPY命令导数语法

通过COPY命令实现在表和文件之间拷贝。在GaussDB中,COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。

1、语法COPY FROM

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 [  ...] ] ];

2、语法COPY TO

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 queryTO { 'filename' | STDOUT }[ WITHOUT ESCAPING ][ [ WITH ] ( option [, ...] ) ]| copy_option| FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [  ...] ] ];

3、特别说明及参数示意

1)特别说明:

  • 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [copy_option [ ...] ] 的无冲突项可以任意排列组合。
  • (query)与[USING] DELIMITERS不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定[USING] DELIMITERS语法子句。
  • 对于FIXED FORMATTTER语法后面跟随的copy_option是以空格进行分隔的。
  • copy_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。

2)参数说明:

  • STDIN声明输入是来自标准输入。
  • STDOUT声明输出打印到标准输出。
  • FIXED打开字段固定长度模式(每条记录的每个字段长度相同。长度不足的字段以空格填充,数字类型字段左对齐,字符字段右对齐。字段和字段之间没有分隔符)。
  • WITHOUT ESCAPING在TEXT格式中,不对'\'和后面的字符进行转义。仅支持TEXT格式
  • FORMATTER在固定长度模式中,定义每一个字段在数据文件中的位置。按照column(offset,length)格式定义每一列在数据文件中的位置。
  • OPTION { option_name ' value ' }:用于指定兼容外表的各类参数
  • TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] )指定表中各个列的转换表达式;其中data_type指定该列在表达式参数中的数据类型;transform_expr为目标表达式,返回与表中目标列数据类型一致的结果值

三、GaussDB数据库使用COPY命令导数示例

COPY 属于SQL命令,导入导出的文件是在数据库服务端的进行的。且需要数据库管理员权限才可以执行,COPY对较大数据集的整体读写效率较好。

1、操作步骤

根据业务需求确定导数需求,提前做好规划,具体可参考如下步骤:

2、准备工作(示例)

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

3、把一个表的数据拷贝到一个文件(示例)

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;

4从一个数据文件拷贝数据到一个表(示例)

测试数据复用上文的数据文件“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、数据仓库:

  • ETL(提取、转换、加载):在构建数据仓库时,通常需要从多个源提取数据,进行转换和清洗,然后加载到数据仓库中。这涉及到数据的导入导出。
  • 报表生成:数据仓库中的数据可以导出到报表中,以供分析和决策。

3、大数据平台:

  • 数据集成:在大数据平台中,可能需要从各种来源导入大量数据,然后再导出到其他系统或服务中。
  • 实时分析:某些场景下,需要实时地从大数据平台中导入数据,以便进行实时分析或处理。
  • 数据备份与恢复:与传统的数据库类似,大数据平台也需要定期备份数据,以确保数据的完整性和可用性。
  • 数据共享与分发:大数据平台的数据可以导出到其他系统或服务中,以实现数据的共享和分发。

这些场景都强调了数据导入导出的重要性,它们是确保数据流动、满足业务需求、支持决策和风险管理的基础设施。

五、小结

使用COPY命令可以方便地导入数据到GaussDB。只需确保源文件的格式与数据库表结构相匹配,并正确指定文件路径,即可轻松完成数据导入。此外,GaussDB还提供了其他数据导入工具和功能,如使用GDS导入数据、使用INSERT多行插入、使用gsql元命令导入数据、ETL工具集成等,以满足不同场景下的数据导入需求。

——结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/319238.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python入门】day17:模块化编程、math库常见函数

什么叫模块 模块的导入 导入所有:import 模块名称 导入指定:from 模块名称 import 函数/变量/类 python的math库 什么是math库 Python的math库是Python的内建库之一,它提供了许多数学函数,包括三角函数、对数函数、幂函数等&a…

生成式AI在自动化新时代中重塑RPA

生成式AI的兴起正在推动行业的深刻变革,其与RPA技术的结合,标志着自动化领域新时代的到来。这种创新性结合极大地提升了系统的适应性,同时也推动了高级自动化解决方案的发展,为下一代RPA的诞生奠定了坚实的基础。 核心RPA技术专注…

Intel SGX -- The Life Cycle of an SGX Enclave

文章目录 前言一、The Life Cycle of an SGX Enclave1.1 Creation1.2 Loading1.3 Initialization1.4 Teardown 二、The Life Cycle of an SGX Thread2.1 Synchronous Enclave Entry2.2 Synchronous Enclave Exit2.3 Asynchronous Enclave Exit (AEX)2.4 Recovering from an Asy…

一个基于SpringBoot+Thymeleaf渲染的图书管理系统

功能: 用户: a.预约图书 b.查看预约记录 c.还书 管理员: a.添加图书 b.处理预约(借书) c.查看借阅记录 另: 1.当用户过了还书日期仍旧未还书时会发邮件通知 2.当有书被还时发邮件通知预约书的用户到图书馆进行借书

介绍十五种Go语言开发的IDE

当涉及到Go语言开发的IDE时,以下是几种常用的选择: Goland:这是由JetBrains公司开发的一款商业IDE,旨在为Go开发者提供符合人体工程学的开发环境。Goland整合了IntelliJ平台,提供了针对Go语言的编码辅助和工具集成&am…

【MATLAB第88期】基于MATLAB的6种神经网络(ANN、FFNN、CFNN、RNN、GRNN、PNN)多分类预测模型对比含交叉验证

【MATLAB第88期】基于MATLAB的6种神经网络(ANN、FFNN、CFNN、RNN、GRNN、PNN)多分类预测模型对比含交叉验证 前言 本文介绍六种类型的神经网络分类预测模型 1.模型选择 前馈神经网络 (FFNN) 人工神经网络 (ANN) 级联前向神经网络 (CFNN) 循环神经网…

每日一道算法题day-one(备战蓝桥杯)

从今天开始博主会每天做一道算法题备战蓝桥杯,并分享博主做题的思路,有兴趣就加入我把! 算法题目: 有一个长度为 N 的字符串 S ,其中的每个字符要么是 B,要么是 E。 我们规定 S 的价值等于其中包含的子…

Spark---RDD介绍

文章目录 1.Spark核心编程2.RDD介绍2.1.RDD基本原理2.2 RDD特点1.弹性2.分布式 :数据存储在大数据集群的不同节点上3.数据集 :RDD封装了计算逻辑,并不保存数据4.数据抽象 :RDD是一个抽象类,具体实现由子类来实现5. 不可…

使用jieba库进行中文分词和去除停用词

jieba.lcut jieba.lcut()和jieba.lcut_for_search()是jieba库中的两个分词函数,它们的功能和参数略有不同。 jieba.lcut()方法接受三个参数:需要分词的字符串,是否使用全模式(默认为False)以及是否使用HMM模型&…

Python----matplotlib库

目录 plt库的字体: plt的操作绘图函数: plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number): plt.axes(rect): plt.subplots_adjust(): plt的读取和显示相关函数: plt库的基础图…

c++语言基础17-判断集合成员

题目描述 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测试数据。 每组数据第一行首先是一个正整数 m&#xff0c;表示集合中元素的数量&#xff08;1 < m &…

Java学习,一文掌握Java之SpringBoot框架学习文集(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…