DWS并行导入导出的使用

举报
1024bug小姐 发表于 2021/06/30 16:20:01 2021/06/30
【摘要】 1、概述   GDS是DWS的并行加载工具。原理是通过gds与dn建立连接、发送数据到dn端,然后dn端再通过hash算法对数据进行redistribute,从而实现数据入库,核心思想是充分利用所有节点的计算能力和I/O能力,以提升性能。GaussDB(DWS)的数据并行导入实现了对指定格式(支持CSV/TEXT格式)的外部数据高速、并行入库。所谓高速、并行入库是和传统的使用INSERT语句...
1、概述   

GDS是DWS的并行加载工具。原理是通过gds与dn建立连接、发送数据到dn端,然后dn端再通过hash算法对数据进行redistribute,从而实现数据入库,核心思想是充分利用所有节点的计算能力和I/O能力,以提升性能。

GaussDB(DWS)的数据并行导入实现了对指定格式(支持CSV/TEXT格式)的外部数据高速、并行入库。所谓高速、并行入库是和传统的使用INSERT语句逐条插入的方式相比较。


2、使用方法   

首先讲一下最简单也是最常用的使用方法:

上传gds可执行文件到数据服务器上,启动gds服务,执行gds –p port –d dir –l log –r –D

在数据库中创建foreign table,Pg本身支持foreign table通过fdw访问本地文件,方法请参考:http://blog.csdn.net/hantiannan/article/details/7553804

create foreign table test_ft(id int)

SERVER gsmpp_server

OPTIONS(location

'gsfs://10.X.X.X:9527/test/test_20200530_*|gsfs://10.X.X.X:9527/test/test_20200530_*',

format 'text',

delimiter '&',

encoding 'utf8',

mode 'Normal'

);

执行导入,如此简单,数据就入库了

Insert into test select * from test_ft;

3、接口简介   

以上是最简单的用法,然后我们来展开讲一下各个接口

gds工具接口:

gds [options]:
    -d dir            Set data directory.
    -p port            Set GDS listening port.
       ip:port        Set GDS listening ip address and port.
    -l log_file        Set log file.
    -H secure_ip_range    Set secure IP checklist in CIDR notation. Required for GDS to start.
    -e dir            Set error log directory.
    -E size            Set size of per error log segment.(0 < size < 1TB)
    -S size            Set size of data segment.(1MB < size < 100TB)
    -R size            Set size of log rotate.(1MB < size < 1TB) default 16M
    -t worker_num        Set number of worker thread in multi-thread mode, the upper limit is 200. If without setting, the default value is 8.
    --enable-ssl         Set GDS connection with SSL security.
    --ssl-dir         Set the directory holding certificate files.
    --debug-level         Set the debug level, which decides how much debug information we print in log. Default value is 0.
                    0:  OFF. Keep the minimum amount of log. Only contains session descriptions.
                    1:  NORMAL. Log the basic "connnect" and "disconnect" information. Useful for identify issues with network traffics.
                    2:  ON. Keep detailed log about node connections, package sent and received, status information.
    --pipe-timeout         Set the pipe timeout for no landing export/import (>1s). Default 1h/60m/3600s.
    -s status_file        Enable GDS status report.
    -D             Run the GDS as a daemon process.
    -r             Read the working directory recursively.
    -V             Show the compiled version information.
    -h            Display usage.

-d是数据目录,目录中可以嵌套目录,指定-r参数可以递归查找数据文件,-p是gds服务启动的端口号,-l是指定日志文件,-H是指定监听IP,-e是指定错误日志目录,-E是指定错误日志文件大小,-S是指定导出文件大小,-s是指定gds状态报告文件,-D是指定gds后台运行

 

4、导入外表   

Foreign table:

以如下外表为例

create foreign table test_ft(id int)

SERVER gsmpp_server

OPTIONS(location

'gsfs://10.X.X.X:9527/test/test_20200530_*|gsfs://10.X.X.X:9527/test/test_20200530_*',

format 'text',

delimiter '&',

encoding 'utf8',

mode 'Normal'

) READ ONLY

LOG INTO ft_1_error PER NODE REJECT LIMIT 'unlimited';

(1)首先需要foreign table与需要入库的普通表一样的表结构,或者在执行导入的时候通过select选取与普通表同结构的列;

(2)location字段是gds地址,同一个外表可填写多个gds地址,需要用竖线隔开,可以在地址中添加目录结构和文件名前缀和后缀等正则,此处的gds地址ip:port不能重复;

(3)format指定数据文件格式,支持csv、text、fixed格式,csv格式可以指定quote把列引起来,适用于数据列中有换行符、数据中有分隔符重复的字符等数据比较复杂的场景,text没有什么特别的地方,fixed是定长格式,所谓定长格式是指每一行的长度已知是固定的;csv格式文件需要指定quote,列被quote包括起来,常用于字段中有换行场景,fixed格式文件需要指定列的offset和length,举例如下:

CREATE foreign TABLE test_ft

(

   R_REGIONKEY  INT POSITION(0,10) NOT NULL

  , R_NAME       CHAR(25) POSITION(20,30) NOT NULL

  , R_COMMENT    VARCHAR(152) POSITION(60,200)

)

SERVER gsmpp_server

OPTIONS (location 'gsfs://10.X.X.X:10000/test.txt', format 'fixed',encoding 'utf8', mode 'normal') ;

POSITION(0,10)表示从0位置开始,列长度为10,POSITION的先后顺序可以不按照列顺序,但是列与列之间不可有重叠;

(4)delimiter和quote,

delimiter指定分隔符,目前支持多字节分隔符,分隔符可以选用符号、不可见字符等,保证数据中没有与分隔符重复的字符;不可见字符的举例如下:

客户场景常用0x1b作为分隔符,

create foreign table test_ft(id int)

SERVER gsmpp_server

OPTIONS(location 'gsfs://10.X.X.X:9527 ',

format 'csv', encoding 'latin1',delimiter E'\x1B') ;

quote指定引号,目前支持单字节引号,引号可以选用符号、不可见字符等,保证数据中没有与引号重复的字符;不可见字符的举例如下:

create foreign table test_ft(id int)

SERVER gsmpp_server

OPTIONS(location 'gsfs://100.X.X.X:9527 ',

format 'csv', encoding 'latin1',delimiter E'\x1B',quote E’\x08’) ;

(5)encoding指定入库时候的编码格式,有中文字符时必须指定,默认是client_encoding;

例如数据文件编码为ISO-8859,建议server_encoding为latin1或者sql_ascii,设置外表的encoding为GBK,保证入库时数据文件不被转换编码,查询时,设置clent_encoding为GBK,即可正常显示中文;

(6)mode指定导入模式,支持normal、shared、private模式,一般常用normal模式,shared模式需要使用nfs,很少使用,private模式需要把数据文件放置在各个dn本机规划好的目录里,在单物理机dn比较多的情况也能取得不错的导入性能;

private模式举例如下:

create foreign table test_ft(id int)

SERVER gsmpp_server OPTIONS (location 'file:///input_data/*', format 'CSV', mode 'private', delimiter E'\x08', quote E'\x1b', null '');

上述外表,需要在每台物理机上创建/input_data目录,然后在该目录下创建跟各dn的pgxc_node_name对应的目录,例如/input_data/dn_6001_6002,将待导入的数据文件放在目录里;

(7)错误数据处理,可以指定导出错误数据到错误表或者gds端;

错误表举例:LOG INTO ft_1_error PER NODE REJECT LIMIT '10'

创建外表时会创建一个round robin分布的错误表ft_1_error,单dn容错条数上限10个,这里是指在某个dn上

导出错误数据到gds举例:REMOTE LOG PER NODE REJECT LIMIT '10'

错误数据会以文件形式保存在gds启动时-e指定的目录中

可容错的类型主要是多列少列等,如果违反not null约束这种是无法容错的,会导致导入报错退出;

(8)忽略转义

如果数据中有\反斜杠,反斜杠在分隔符和引号会造成转义,导致错位;

忽略转义选项举例如下:

CREATE FOREIGN TABLE test_ft(id int)

SERVER gsmpp_server

OPTIONS (location 'gsfs://10.X.X.X:10000/test/*', format 'text',delimiter '^',

noescaping 'true');

(9)忽略多余列

如果数据文件一行数据比表结构多,可以使用忽略多余列功能;

忽略多余列举例如下:

CREATE FOREIGN TABLE test_ft(id int)

SERVER gsmpp_server

OPTIONS (format 'text', location 'gsfs://10.X.X.X:6001/*',ignore_extra_data 'true');

执行导入:

导入语句可以是简单的insert into test select * from test_ft,这种情况要求foreign table与普通表表结构完全一致,另外可以选择性的导入,例如insert into test select id from test_ft where id>100;另外也可以使用系统函数,例如insert into test select sysdate,id from test_ft;事实上,按照设计,只要是能下推的查询语句都可以用于gds导入。

5、导出外表   

以如下导出外表为例:

create foreign table test_ft(id int)

SERVER gsmpp_server

OPTIONS(location

'gsfs://10.X.X.X:40006/| gsfs://10.X.X.X:40007/',

format 'text',

delimiter '&',

encoding 'gbk',

EOL ‘0x0A’

)write only;

(1)行结束符

EOL选项可选值为0x0D0A和0x0A,分别为windows和unix的换行符;

(2)导出到DN本地

导出到本地外表举例如下:

create foreign table test_ft(id int)

SERVER gsmpp_server

OPTIONS (location '/home/pgdba/', format 'text', encoding 'latin1',eol '0x0D0A',delimiter E'\x1B') WRITE ONLY;

执行导出,会在指定的/home/pgdba目录下自动创建dn编号命名的目录,将单个DN的数据导出到对应目录中;

(3)导出到数据服务器

将业务数据导出到集群之外的主机上,这是最常用的导出方式,可以在导出外表中指定多个gds地址,数据会均匀导出到各个gds对应的目录,不可将多个gds起在同一个目录上,导出时会覆盖。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。