GaussDB 数据导入导出工具介绍

本节课程一起来学习一下GaussDB数据库的导入导出。

目录

一、数据导入导出场景划分 

1. gsql工具适用场景和使用方法

2. copy使用场景和使用方法

3.gs_dump工具使用方法

4. gs_restore工具使用方法

二、gs_loader介绍

1. 工具介绍

2.创建系统表和数据表

3.创建控制文件ctl

4.数据文件data.csv示例

5.进行导入

6.执行结果

三、GDS使用方法-导入示例

1.启动GDS服务

 2.创建外表

3.执行导入

四、GDS使用方法-导入错误表分析

1.错误表

​编辑2.常见导入错误

五、GDS使用方法-导出

1.启动GDS服务

2.创建外表

3.执行导出


一、数据导入导出场景划分 

1. gsql工具适用场景和使用方法


适用场景
文本格式对象定义的创建

使用方法

gsql -d db1 -p 16000 -U u1 -W Huawei@123 -f/data/table.sql


示例:

ALTER SESSION SET CURRENT_SCHEMA = PUBLIC;

ALTER TABLE "PUBLC".GA_COM_COLLECTION_ERROR_TABLEMODIFY MESSAGE VARCHAR(4000);
ALTER TABLE "PUBLIC".GA_COM_COLLECTION_ERROR_TABLE ADDCOLUMN FRRORCOUNTINT NUL DEEAULT O;
ALTER TABLE "PUBLIC".GA_COM_COLLECTION_ERROR_TABLE ADDCOLUMN PLUGINID VARCHAR (50)NULL;
ALTER TABLE "PUBLIC".GA_COM_COLLECTION_ERROR_TABLE ADDCOLUMN IS ALARM RAISED INT NULL DEFAULT O;
CREATE INDEX GA_COM_COLLECTION_ERROR_TABLE_IDX ON
"PUBLIC".GA_COM_COLLECTION_ERROR_TABLE(CLUSTERID,PLUGINID);

CREATE OR REPLACE FUNCTION GenerateSnapshotID()
   RETURN BIGINT IS
   SnapID BIGINT;
BEGIN
   SELECT"PUBLIC".GA_COM_COLLECTION_SNAPSHOT_SEQ.nextval into
   SnaplD from SYS_DUMMY;
   RETURN SnapID;
END;


2. copy使用场景和使用方法


copy是数据库服务端的命令,只能在服务端执行数据导入,\copy则可以在客户端执行命令。
适用场景

小数据量表以文本数据作为来源导入;

小数量表的导出,查询结果集导出;

使用方法

文本数据导入:

copy t1 from '/data/input/t1.txt'delimiter ',';


表数据导出:

copy t1 to '/data/input/t1 output.txt' delimiter ',';


查询结果集导出:

copy (select * from t1 where a2=1) to '/data/input/t1 output.txt'delimiter ',';


注:分布式场景中,copy from/to是从CN端进行数据的导入导出,与GDS方式相比性能较低。

数据文件示例(CSV)

1,AAAA,842334595,LKDHSGWIE04OKJNGOERI20ONG
2,BBBB,842339356,KBJASAKDGNIASKDGNOKRMKNGA
3,CCCC,840282591,JBIASKDG10JT3409JNLG0123L
4,DDDD,842871486,LKSD8498LJFG71LKLJASNDGDS
5,EEEE,8429897130,SD81KNA0LAKJG0O4L23NL1KN
6,FFFE,842334595,LLA0AKJN88ASJDGN6LK3LKLNA
7,GGGG,840148810,LKDHSGWIE04OKJNI20ONGLSDK
8,HHHH,846768299,YUIHBRIASASD8BDKHDBFAIS2L
9,IIII,847990809,YNBBV2VXZUODJNFAKS3498YBS
10,JJJJ,842334595,SDUGBAKSHD874TI1BGPO14J
11,KKKK,827592226,T9134F90AKLSAJOIKAJSDFFYA
12,LLLL,842334595,LKDHSGWIE04OKJNGOERIGLSDK
13,MMMM,842849111,YJASDHA690HASJ013B01B102
14,NNNN,842334595,JBIASKDG10JTJNLASDKG0123L
15,OOOO,847465286,JZZXKCEBO02392NOFKS0120NS
16,PPPP,842334595,YNBBZUOWEISDJNFAKS3498YBS
17,QQQQ,842334595,LKDHSGWIE040KJNGOERI20ONG
18,RRRR,848347289,U98KHNASDY9OABSDGVSD9JBO0
19,SSSS,842334595,YNBBV2VXZUOWEISDJN3498YBS
20,TTTT,842334595,LKDHSGWIE04OKJRI20ONGLSDK
21,UUUU,847187929,LLA0AKJN88GN6LK3LK32NLLTA
22,VVVV,842334595,LKSD849G71LJASOKLJASNDGDS
23,WWWW,847592917,OKNA0LAKJG0Q4L23NL1KNL1N
JDBC中使用copy


适用于copy的场景中,编程的方式导入数据;

使用方法

private void metadataToDB(){
   try {
   CopyManager cpManager = new CopyManager((BaseConnection) conn);
//清理数据库中已有数据,可选
    st.executeUpdate( "TRUNCATE TABLE metadata;");
    String metaFile = this.dataDirectory + File.separator+this.metadataFile.
    this.logger.log(Level.INFO, "Importing metadata from " + metaFile);
    long n = cpManager.copyln( "COPY metadata FROM STDIN WITH CSV" , new
FileReader(metaFile));
    this.loggerlog(Level.INFO, n + " metadata imported");} catch(Exception e){
    e.printStackTrace();
    System.exit(1);
    }
}


gs_dump/gs_restore适用场景
适用场景

导出、恢复整个数据库对象定义:用户可以自定义导出一个数据库或其中的对象(模式、表、视图等)。

以Sql语句进行导入、导出:导入导出为.sql文件格式为纯本格式。

避开业务高峰期,避免操作失败:gs_dump工具在进行数居导出时,其他用户可以访问数据库数据库(读或写)。

3.gs_dump工具使用方法


导出单表定义

gs_dump mydb -U u1 -W Huawei@123 -p 16000 -s -t t1 -f /data/t1.sql -F c


导出整个数据库对象

gs_dump mydb -p 16000 -s -f /data/all.sql


导出数据库所有对象和数据

gs_dump mydb -p 16000 -f /data/all.sql


导出文件示例

SET statement timeout = 0;
SET xmloption = content;
SET client_encoding = 'SQL ASCII';
SET standard_conforming strings = on;
SET check_function_bodies = false;
SET client_ min_messages = warning;

SET search_path = public;
SET default_tablespace = ";
SET default_with oids = false;

--
--Name: t1; Type: TABLE; Schema: public; Owner: rdsAdmin; Tablespace:
--

CREATE TABLE t1(
    name text,
    age integer
)
WITH (orientation=row,compression=no)
DISTRIBUTE BY HASH(name);

ALTER TABLE public.t1 OWNER TO "rdsAdmin";

--
--Data for Name: t1; Type: TABLE DATA; Schema: public; Owner:rdsAdmin
--

COPY t1 (name, age) FROM stdin;
st                   27
\.
;


4. gs_restore工具使用方法


gs_restore恢复数据库对象:gs_restore工具支持的格式包括自定义归档、目录归档和tar归档格式。1、执行gsql程序,使用如下选项导入由gs_dump/gs_dumpall生成导出文件夹(纯文本格式)的

MPPDB_backup.sql文件到mydb数据库。

gsql -d mydb -p 8000 -f
/home/omm/test/MPPDB_backup.sal
Password:
SET
ALTER TABLE
CREATE INDEX
REVOKE
GRANT
total time: 30476 ms


示例中"-f"后的是导出的文件,"8000"表示数据库服务器端口;"mydb"表示要访问的数据库名。
2、执行gs_restore,将导出的MPPDB_backup文件(目录格式)导入到mydb数据库。

示例:执行成功

gs_restore backup/MPPDB_backup -p 8000 -d mydb
Password:
gs_restore[2017-07-21 19:16:26]: restore operation
successful
gs_restore[2017-07-21 19:16:26]: total time: 21003 ms


示例:执行失败

gs_restore backup/MPPDB_backup -p 8000 -d mydb
Error while PROCESSING TOC:
Error from Toc entry 6245:0 18719 TABLE DATA
ga_an_an failure_report_detail apprim
COPY failed for table "ga_an_an_failure_report_detail": ERROR: duplicate key value violates unique constraint "ga_an_an_failure_report_detail_pkey1"
DETAlL: Key (faildetailid)=(1) already exists.
CONTEXT: COPY ga_an_an_failure_report_detail, line 13: ""
table ga_pl_ap_upgradelog complete data imported !
Finish reading 30 SQL statements!
end restore operation ...
WARNING: errors ignored on restore: 1
restore operation successful
total time:150 ms


二、gs_loader介绍


1. 工具介绍


gs_loader工具是一款兼容Oracle的sqlldr的导入工具,语法基本兼容Oracle的sqlldr。
适用场景

Oracle的sqlldr兼容场景的导入

可以设置导入的容错性

当前只支持集中式

原理介绍


将控制文件支持的语法转换为\COPY语法,然后利用已有的\COPY功能,实现数据导入工作。

gs_loader使用方法-导入
1.创建用户并授予使用权限

CREATE USER load_user WITH PASSWORD '************';
GRANT ALL ON FUNCTION copy_error_log_create() TO load_user;
GRANT ALL ON SCHEMA public TO load_user;
SELECT copy_error_log_create();
SELECT copy_summary_create();
GRANT ALL PRIVILEGES ON public.pgxc_copy_error_log Toload_user;
GRANT ALL PRIVILEGES ON public.gs_copy_summary To load_user;


2.创建系统表和数据表

select copy_summary_create();--gs_copy_summary记录执行结果汇总,包括成功行数,出错行数,忽略行数,空行数。

Select copy_error_log_create();--错误表pgxc_copy_error_log 。
503.1.SPC1300及以后版本之后无需再创建错误表


3.创建控制文件ctl

LOAD DATA
truncate into table loader_tbl
WHEN name = 'Jack'
fields terminated by ','
trailing nullcols
(
    id integer external
    name char(32),
    con "length(name)",
    dt date
)


4.数据文件data.csv示例

1,OK,2007-07-8
2,OK,2008-07-8
3,OK,2009-07-8
a,OK,2007-07-8
43,DISCARD,,2007-07-8

"'
32,DISCARD,,2007-07-8
a,ERROR int,,2007-07-8
8,ERROR date,2007-37-8
""
'
8,ERROR fields,,2007-37-8

'"
5,OK,,2021-07-30


5.进行导入

gs_loader control=loader.ctl data=data.csv db=testdb discard=loader.dis
bad=loader.bad errors=5 port=8000 passwd=************ user=load_user


6.执行结果

gs_loader: version 0.1 10 Rows successfully loaded.log file is: Loader.log

gs_loader控制文件格式
控制文件示例

LOAD DATA
truncate into table salldr_tbl
fields terminated by ','
WHEN name ='Jack'
trailing nullcols
(
    id integer external,
    name char(32),
    dt date
)


a.sqlldr_tbl是目标表名,truncate表示如果表中有数据,则全部删除后再导入,可选值包括:insert、append、replace、truncate。
b.fields terminated by ',’表示数据文件中按 ',’分隔字段。
C.WHEN name =‘Jack’ 表示根据name过滤,只导入name= 'Jack’的数据。
d.小括号 中定义了导入的字段列表。id为字段名称,integer external为字段类型


1)普通数据类型: char. integer external. float external. decimal external. timestamp, date, date external. sysdate
2)特殊数据类型: integer、smallint、raw
e.以上为控制文件的简单示例,完整格式参考集中式《GaussDB Kernal 工具参考》中“客户端工具-gs_loader”章节。

gs_loader特性:支持position
1.使用场景:通过字段起始和结束位置来获取对应字段
2.使用方法:在控制文件字段列表中指定position,如下所示:

LOAD DATA
truncate into table sqlldr_tbl
trailing nullcols
(
    id position(1:4)integer external,
    name position(5:6) char(32)
) 

gs_loader特性:支持列表达式
1.使用场景:使用表达式对数据进行变换后再插入目标表中
2.使用方法:在控制文件字段列表中指定列表达式,如下所示:

LOAD DATA
truncate into table salldr_tbl
fields terminated by ','
trailing nullcols
(
	id integer external,
	name char(32)"trim(:name)"
	address char(8)"replace(:address, ':'. '_')"
	money integer external “case when :money<1000 then 0 else :money-1000 end'
) 作者:Gauss松鼠会 https://www.bilibili.com/read/cv33630164/?spm_id_from=333.999.0.0 出处:bilibili

gs_loader特性:按行提交
1.rows 命令行参数介绍
不指定rows参数时,rows无默认取值,表现为只进行一次提交,即所有数据都导入表中后进行一次事务提交。

参数指定每导入多少行数据后就进行一次提交,可以避免导入大量数据时因为失败,导致前功尽弃。 

gs loader control=loader.ctl data=data.csv db=testdb discard=loader.dis bad=loader.bad
errors=5 rows=10000 port=8000 passwd=************ user=load_user

 

这里的rows=10000表示每成功导入10000行提交一次

2.最佳实践
单次导入提交次数不建议超过1000次,否则可能会对性能产生影响。
提交次数约等于数据文件中数据总行数除以rows参数取值。

GDS介绍
工具介绍
GDS(Gauss Data Service)工具,用于解决分布式场景下大数据量数据导入导出慢的问题。通过DN并行导入导出,解决了CN在分布式常规导入导出的瓶颈问题,极大提升了导入导出的效率。

适用场景

分布式场景下大数据量表以文本数据作为来源导入。

大数据量表的导出。

可以设置导入的容错性。

离线导入。

GDS原理介绍
传统单节点导入性能低,通过GDS工具充分利用多节点并行导入,提高整体导入性能:

1、CN节点只负责任务的规划及下发,把数据导入的工作交给了DN节点,释放了CN节点的资源。
2、GDS进程负责数据文件的切分,然后分发给各个DN实例。
3、各DN实例接收到数据分片后解析数据,而后根据表的分布列计算hash值,确定该条数据属于哪个DN;如果属于自身则缓冲中到本地,如果属于别的DN则通过网络发送给相应的DN。

Foreian Table:
用于识别源数据文件的位置、文件格式、存放位置、编码格式、分隔符等信息;是关联数据文件与数据库实表(目标表)的对象。

三、GDS使用方法-导入示例


1.启动GDS服务

gds-d/input_data/-p10.186.251.85:8808-H0.0.0.0/0 -/log/gds_log.txt -D -t2

 2.创建外表

create foreian table t1_foreiqn(a1 varchar2(10),a2 int)
	SERVER qsmpp_server OPTlONS (location 'gsfs://10.186.251.85:8808/t1.txt'
	format 'text',encoding 'utf8’,delimiter '^',null ") per node reject limit 'value'
	with error_ftr_sbtest2; 

3.执行导入

insert into t1 select * from t1_foreign;

四、GDS使用方法-导入错误表分析


1.错误表


2.常见导入错误

invalid byte sequence for encoding "“UTF8"”:0x00


文本数据中含有对UTF8来说非法字符的编码0x00,需要用命令进行清理tr-s“八000]“”“八040*]”<inputfile >outputfile,后续版本提供错误数据入库选项。

missing data for column “a2”


错误数据行缺失列。

value too long for type character varying(10)


错误数据行的字段值超过表定义字段长度。

五、GDS使用方法-导出


1.启动GDS服务

gds -d /input_data/-p 192.168.0.90:5000 -H10.10.0.1/24 -I/log/gds_log.txt -D -t 2


2.创建外表

create foreian table t1_foreian output(a1 yarchar2(10), a2 int)
    SERVER gsmpp_server OPTlONS (location 'gsfs://10.185.240.41:8000/',
    format 'text',encoding 'utf8', delimiter'^',nul ")
    write only;


3.执行导出

insert into t1_foreign_output select * from t1;


导出的文本命名格式为t1_foreign_output.dat.0
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mat转为txt的double数据||无截断误差保存多位小数

前情提要 需要将86400021的.mat数据存为visual studio可用的格式&#xff0c;主要是.csv数据或.txt数据 方法大概三种&#xff0c;一&#xff1a;csvwrite&#xff1b;二&#xff1a;save为txt&#xff1b;三&#xff1a;fprintf 一&#xff1a;csvwrite 1 csvwrite(ga_mat.…

Git merge的版本冲突实验

实验目的 发现 两个分支的 相同文件 怎样被修改 才会发生冲突&#xff1f; 实验过程 1.初始状态 现在目前有1.py、2.py两个文件&#xff0c;已经被git管理。现在我想制造冲突&#xff0c;看怎样的修改会发生冲突&#xff0c;先看怎么不会发生冲突。 目前仓库里的版本是这样…

简述大模型领域的CVP架构和RAG架构的区别

大模型领域的CVP&#xff08;ChatGPT VectorDB Prompt&#xff09;架构&#xff0c;是否等同于RAG增强式搜索。 首先&#xff0c;CVP是特指一个聊天系统相关的架构&#xff0c;即&#xff1a; ChatGPT&#xff1a;基于GPT模型的聊天机器人技术。 VectorDB&#xff1a;向量数…

【声呐仿真】学习记录0-服务器配置docker、ros环境

【声呐仿真】学习记录0-服务器配置docker、ros环境 前言一、~~0.设置mobaXterm~~1.拉取镜像2.服务器开启xhost&#xff0c;可视化&#xff08;rviz、gazebo&#xff09;3.创建容器&#xff0c;挂载数据卷4.测试宿主机与容器数据是否同步5.测试5.0测试xclock5.1测试ros小乌龟5.2…

bayesplot|分享一个可视化贝叶斯模型的R包

1.bayesplot介绍 该包主要用于贝叶斯模型的可视化分析&#xff0c;提供了一系列工具来帮助评估、理解和诊断贝叶斯模型。这个包特别适用于与 Stan 以及其他提供 MCMC 样本的软件如 JAGS 和 BUGS 的模型输出。 后验分布图:包括密度图、直方图和区间图&#xff0c;用于展示模型…

微信小程序和公众号打通,实现用户关注公众号送优惠券

前提 小程序 公众号 微信开放平台 小程序和公众号都需要绑定到同一个微信开放平台,因为要获取Unionid&#xff0c;unionid是什么 如果开发者拥有多个移动应用、网站应用、和公众账号&#xff08;包括小程序&#xff09;&#xff0c;可通过 UnionID 来区分用户的唯一性&#xf…

【Linux】驱动_2_字符驱动

1. Linux设备分类 字符设备: 指应用程序按字节/字符来读写数据的设备。通常为传真、虚拟终端和串口调制解调器、键盘之类设备提供流通信服务&#xff0c;通常不支持随机存取数据。字符设备在实现时大多不使用缓存器。系统直接从设备读/写每一个字符。块设备: 通常支持随机存取…

Jenkins 打包报错记录 error: index-pack died of signal 15

问题背景&#xff0c;打包每次到92%时就会报错&#xff0c;试了好几次都是同样的错误 14:56:53 fatal: index-pack failed 14:56:53 14:56:53 at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2734) 14:56:53 at org.jenkinsci.plugi…

GoLand远程开发IDE:使用SSH远程连接服务器进行云端编程

目录 ⛳️推荐 1. 安装配置GoLand 2. 服务器开启SSH服务 3. GoLand本地服务器远程连接测试 4. 安装cpolar内网穿透远程访问服务器端 4.1 服务器端安装cpolar 4.2 创建远程连接公网地址 5. 使用固定TCP地址远程开发 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&am…

【复现】金和OA-jc6 RCE漏洞_74

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 金和C6协同管理平台包括协同办公管理,人力资源管理,项目管理,客户关系管理,企业目标管理,费用管理,移动办公,微信办公等多个业务范…

Java——内存溢出如何排查

1、模拟内存移除场景 public class OOMTest {public static void main(String[] args) {List<byte[]> memoryLeakArray new ArrayList<>();for (int i 0; i<1024; i){byte[] bytes new byte[1024 * 1024];memoryLeakArray.add(bytes);}} }初始化启动参数最大…

小心!那个走了的员工可能带走了公司的秘密

数据泄露是企业安全的一大隐患&#xff0c;尤其是离职员工带走公司数据的问题&#xff0c;这是一种常被忽视的内部威胁。离职员工可能因为种种原因&#xff0c;带走了他们曾经可以访问的公司数据。而这些数据如果落入了不当的地方&#xff0c;可能会给企业带来严重的损害。那么…

力扣数据库题库学习(4.24日)

1068. 产品销售分析 I 问题链接 思路分析 编写解决方案&#xff0c;以获取 Sales 表中所有 sale_id 对应的 product_name 以及该产品的所有 year 和 price 。返回结果表 无顺序要求 。 这个问题很简单&#xff0c;查询两张表内的指定字段。这个考的其实就是数据库的连接&am…

23种设计模式(Java版,超详细!)

文章目录 一、什么是设计模式二、设计模式的分类三、设计模式的基本要素四、23种设计模式概览五、设计模式间的关系六、设计模式详解6.1. 工厂方法模式&#xff08;Factory Method&#xff09;6.2. 抽象工厂模式&#xff08;Abstract Factory&#xff09;6.3. 建造者模式&#…

屏幕状态自动检测+鼠标自动操作

目录 一、写在前面 1.1适用场景 1.2涉及到的库 二、函数库 2.1pyautogui-屏幕截图&鼠标操作 2.1.1屏幕截图screenshot函数 2.1.2鼠标移动及单击 2.2Opencv-模板匹配 2.2.1matchTemplate函数 2.2.2minMaxLoc函数 2.2.3相关代码 2.3base64-图片转base64 2.3.1在线…

【行为型模式】模板方法模式

一、模板方法模式概述 模板方法模式定义&#xff1a;在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。(类对象型模式) 模板方法中的基本方法是实现算法的各个步骤&#xff0c;是模板方法的…

谷歌搜索SEO优化需要做什么?

最基本的要求&#xff0c;网站基础要优化好&#xff0c;让你的网站更加友好地服务于用户和搜索引擎&#xff0c;首先你要保证你的网站也适配手机端&#xff0c;现在手机端&#xff0c;如果你的网站在手机上打开慢&#xff0c;或者没有适配手机端&#xff0c;让用户用手机看着电…

Echarts X轴类目名太长时隐藏显示全部

echarts图表X轴 在柱状图中,X轴类目名如果数据太长; echarts会默认进行隐藏部分字段; 如果我们想让每一个类目名都显示出来,需要进行额外的处理X轴类目名太长时,默认只显示一部分类目名 <!DOCTYPE html> <html lang="en"> <head><meta ch…

硬实力!神工坊团队在首届开放原子开源大赛中斩获一二等奖

日前&#xff0c;首届开放原子开源大赛苏州站在苏州工业园区顺利开赛&#xff0c;神工坊团队在“大规模非对称不定带宽线性代数方程组求解算法赛”中表现非凡&#xff0c;斩获一二等奖&#xff01; “大规模非对称不定带宽线性代数方程组求解算法赛”是“开放原子开源大赛”工业…

画机柜布置图就这么简单,你学会了吗?

你还在使用excel画机柜布置图&#xff1f; 你还在使用CAD画机柜布置图&#xff1f; 你还在使用Visio画机柜布置图&#xff1f; 我们今天都在使用nVisual画机柜布置图&#xff01; 第一步&#xff1a;登录注册cloud.nVisual.com云平台&#xff0c;免费使用Visual&#xff1b; 第…
最新文章