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











