暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

简单粗暴但常用的数据共享之道—远程数据导出

原创 灵魂摆渡者 2023-05-17
464

    在不同的数据库系统之间进行数据共享,如果存在物理网络隔离、数据库异构、数据安全机制要求等情况下,数据导出、转移、导入则是常常使用的一种稳妥数据共享方式,此时数据库的导出性能、导出位置等能力则显得尤其重要。

    目前GBase 8a集群支持两类导出方式,一类是SERVER端导出(本地导出、HDP导出、FTP/SFTP导出),另一种则是远程导出。远程导出(简称RMT导出)是一种将数据从集群服务器导出到集群客户端所在机器的方式,导出后的数据为指定格式的平面文本文件。其导出流程示意图如下:


原理步骤说明:

1 执行远程导出语句后,GCCLI检查是否存在同名文件,GCCLI启动监听端口,创建监听线程和导出线程,发送给GCLUSTER。

2 GCLUSTER生成查询计划下发给GNODE。

3 GNODE执行查询,连接GCCLI,将分片查询结果发送到GCCLI。

4 GCCLI接收来自GNODE的数据,并将数据写入目标文件。

语法参数说明:

GBase 8a MPP远程数据导出是SQL命令方式导出,无需按照配置导出工具即可完成数据的远程导出,其语法为:

rmt:select_syntax INTO OUTFILE 'file_path' [OUTFILE_OPTIONS]

file_path:保存导出数据的路径及文件名,如果是相对路径,导出文件存放到用户登录客户端时所在目录 + file_path指定的路径

OUTFILE_OPTIONS:数据导出规则

OUTFILE_OPTIONS

说明

FIELDS/COLUMNS TERMINATED BY

字段分隔符, 长度0 ~ n, 默认值'\t'

FIELDS/COLUMNS ESCAPED BY

转义标识符, 长度0 ~ 1, 默认值'\', 表示为'\\'。若某字段中存在与转义符相同的字符时,将该字符双写

FIELDS/COLUMNS [OPTIONALLY] ENCLOSED BY

字段包围符, 长度0 ~ 1, 默认值为空

FIELDS/COLUMNS [OPTIONALLY] DOUBLE_ENCLOSED BY

字段包围符自转义, 除上所述外, 当转义符设置为空时, 若某字段满足使用字段包围符的条件,且该字段中含有与字段包围符相同的字符时, 将该字符双写

FIELDS/COLUMNS LENGTH

使用定长导出模式时, 用于设定字段长度, 用逗号分隔, 该参数与字段分隔符和包围符冲突

LINES TERMINATED BY

行分隔符, 支持多字符, 默认值'\n'

LINES STARTING BY

行起始符, 支持多字符, 默认值为空

FIELDS/COLUMNS  BLOBMODE

指定LONGBLOB字段的导出方式,可分别对每个LONGBLOB字段指定导出方式,可选值为:文本方式 TYPE_TEXT,base64编码方式 TYPE_BASE64,路径方式 TYPE_URL。默认值为TYPE_TEXT

NULL_VALUE

空值标识符, 支持多字符,默认为'\N'

CHARSET SET

指定导出文件的字符集,支持GBK和UTF8,默认导出和源表字符集保持一致

WITH HEAD

导出文件带有表头信息

WRITEMODE BY

导出文件写入方式,可选值: NORMAL, OVERWRITES, 默认值NORMAL

FILESIZE

导出文件大小的最大值,取值范围[0, LONGLONG_MAX], 默认值为0,表示不限制导出文件大小。支持k/K/m/M/g/G后缀表示方法。

新文件命名方式:文件名+_pN+后缀名,例如test.tbl -> test_p1.tbl

注意:文件分裂功能

远程导出端口设置:

在配置文件*/gcluster/config/gbase_8a_gcluster.cnf的client部分设置参数,*代表数据库的安装目录位置。远程导出功能默认使用导出客户端所在机器的16066-16165端口范围作为导出服务的临时端口。

参数值

最大值

最小值

默认值

remote_export_min_port

1025

65535

16066

remote_export_max_port

1025

65535

16166

其他的常用参数:

l  remote_export_thread_buffer_size

功能:设置远程导出时存放临时数据的buffer大小

数据类型:unsigned long

默认值:32 (单位:MB)

l  remote_export_first_rows

功能:通过hint方式将first_rows关键字下发到Data节点执行,促使Data节点在完成指定行数的结果集物化后,立刻发送给客户端

数据类型:unsigned long

默认值:0 (即不启用)

l  参数名:remote_export_debug,远程导出日志参数控制

取值范围:0-1,0表示关闭,1表示开启,默认值为0

作用:当该参数的值为1时,进行远程导出时会在/tmp目录下生成rmt_export.log文件,该文件中记录了远程导出过程中的相关调试信息。

l  参数名:remote_export_create_directory,

取值范围:0-1,0表示关闭,1表示开启,默认值为0

作用:当使用FILESIZE参数进行远程导出时,可能会出现使用同名多次导出时,每次生成的文件数不相同的情况。这种情况会导致其他导入程序无法准确识别某次导出任务的文件。在该值为1的情况下会自动创建与导出文件同名的目录,并在该目录下生成导出文件。

使用示例:

在GBase 8a MPP中建表,并插入测试数据,表结构如下:

Create table test(

Col1 int,

Col2 varchar(20)

);

INSERT INTO test VALUES(1,'esc\\ape'),(2,'CR\nLF'),(3,NULL);

1)字段分隔符、字段包围符、转移字符指定的导出语句示例:

参数FIELDS TERMINATED BY是字段分隔符,ENCLOSED BY是字段包围符,ESCAPED BY是转移字符。

2)行结束符、行还是符设置的导出语句示例:

参数LINES TERMINATED BY 是行结束符,STARTING BY 是行开始符

3)导出带表头

参数名称是WITH HEAD

4)空值导出转换

参数名称是NULLS_VALUE


5)写模式指定,是否覆盖写

参数名称是writemode by overwrites,加上该参数表明是覆盖写模式。


6)导出文件按指定大小切分

说明:由于文件分裂功能需要在写入文件时对数据进行拆行并计算大小,所以使用文件分裂功能可能会导致导出性能下降,且由于每行数据长度可能不统一,为了保证数据完整性,每个文件都会存放完整的行数据,所以拆分后每个文件的实际大小会大于或小于FILESIZE指定值。


7)BLOB类型的数据导出示例

先使用如下语句,构建测试用例:

gbase> CREATE TABLE tb(id INT, bl LONGBLOB);

gbase> INSERT INTO tb VALUES(1,'aaa'),(2,'bbb');

导出BLOB类型的参数是FIELDS BOLBMODE,有两种模式,一种是type_base64直接库中存储BLOB模式,另一种是URL方式,参数指定导出类型为type_url。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论