GaussDB 200支持将存在远端服务器上的TEXT、CSV和FIXED格式的数据导入到集群中。本文介绍使用GDS(Gauss Data Service)工具将远端服务器上的数据导入GaussDB 200。环境如下表:
GaussDB 200使用GDS服务导入导出数据_第1张图片

1、准备源数据

这里从PostgreSQL数据库中,使用copy命令导出一个csv格式的文件,如下:

rhnschema=> copy rhnpackagefile to '/tmp/rhnpackagefile.csv' with csv;

2、安装并启动GDS

  • 创建用户以及用户组
[root@hd04 bin]# groupadd gdsgrp
[root@hd04 bin]# useradd -g gdsgrp gds_user
  • 创建相关目录
    分别创建存放源数据以及GDS安装目录(自定义)。
    [root@hd04 ~]# mkdir /opt/bin   --GDS安装目录
    [root@hd04 ~]# mkdir /opt/data --源数据存放目录
    [root@hd04 ~]# chown -R gds_user:gdsgrp /opt/bin/gds
    [root@hd04 ~]# chown -R gds_user:gdsgrp /opt/data
  • 拷贝源数据到数据目录
    [root@hd04 ~]# su - gds_user
    [gds_user@hd04 ~]$ scp root@hd01:/tmp/rhnpackagefile.csv /opt/data
  • 安装GDS服务
    GDS工具位于GassDB安装包里,需要单独解压出来,以redhat的安装包为例,如下:
    [root@hd04 ~]# tar -xzf GaussDB_200_6.5.1_RHEL.tar.gz

    解压后找到GaussDB-Kernel-V300R002C00-REDHAT-64bit-Gds.tar.gz压缩包,并解压至GDS安装目录。

    [gds_user@hd04 ~]$ cd /opt/bin
    [gds_user@hd04 bin]$ tar -xzf /tmp/GaussDB-Kernel-V300R002C00-REDHAT-64bit-Gds.tar.gz

    然后以root用户修改/etc/profile,加入以下内容:

    [root@hd04 ~]# vi /etc/profile
    export LD_LIBRARY_PATH="/opt/bin/lib:$LD_LIBRARY_PATH"

    此处主要是配置GDS库路径,因为它依赖了Cjson动态库。

  • 启动GDS服务
    [root@hd04 ~]# su - gds_user
    [gds_user@hd04 ~]$ /opt/bin/gds/gds -d /opt/data -p 192.168.120.25:5000 -H 192.168.110.1/24,192.168.120.1/24 -l /opt/bin/gds/gds_log.txt -D

    GDS的启动模式有两种:非ssl传输数据模式和ssl加密方式传输数据模式。上面使用的是非ssl传输数据模式。
    对于ssl模式,需要将GaussDB创建的GDS证书拷贝到GDS的安装目录里,如下:

    [gds_user@hd04 ~]$ cd /opt/bin/
    [gds_user@hd04 bin]$ scp -r root@hd01:/opt/huawei/Bigdata/mppdb/core/share/sslcert/gds ./

    以ssl模式启动GDS服务如下:

    [gds_user@hd04 ~]$ /opt/bin/gds/gds -d /opt/data -p 192.168.120.25:5000 -H 192.168.110.1/24 -l /opt/bin/gds/gds_log.txt -D --enable-ssl --ssl-dir /opt/bin/gds

    参数说明如下图所示:
    GaussDB 200使用GDS服务导入导出数据_第2张图片

    3、创建表并导入数据

    这里需要创建外表以及目标表,语句如下:
    GaussDB 200使用GDS服务导入导出数据_第3张图片
    外表参数如下图所示:
    GaussDB 200使用GDS服务导入导出数据_第4张图片
    创建目标表,如下:
    GaussDB 200使用GDS服务导入导出数据_第5张图片
    使用如下命令导入数据:

    rhnschema=# INSERT INTO rhnpackagefile2 SELECT * FROM f_rhnpackagefile;
    INSERT 0 27942567

    GaussDB 200使用GDS服务导入导出数据
    在导入过程中,如果出现数据格式错误,系统会记录到一张error表里(创建外表时指定的表)。

    4、优化导入数据的查询性能

    在数据导入完成后,执行ANALYZE语句生成表统计信息。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。

如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运行ANALYZE命令。大量的更新和删除操作,会产生大量的磁盘页面碎片,从而逐渐降低查询的效率。VACUUM FULL可以将磁盘页面碎片恢复并交还操作系统。

rhnschema=# VACUUM FULL rhnpackagefile2;
VACUUM
rhnschema=# ANALYZE rhnpackagefile2;
ANALYZE

5、停止GDS服务

导入完成后,如果不需要GDS服务,可以将其停止。以gds_user用户,查询出GDS服务的进程号将其kill掉即可。

6、使用外表并行导出数据

使用GDS工具将数据从数据库导出到普通文件系统中,适用于高并发、大量数据导出的场景。通过外表设置的导出模式、导出数据格式等信息来指定待导出的数据文件,利用多DN并行的方式,将数据从数据库导出到数据文件中,从而提高整体导出性能。不支持直接导出文件到HDFS文件系统。

  • CN只负责任务的规划及下发,把数据导出的工作交给了DN,释放了CN的资源,使其有能力处理外部请求。
  • 通过让各个DN都参与数据导出,充分利用各个设备的计算能力及网络带宽。
    GaussDB 200使用GDS服务导入导出数据_第6张图片

GaussDB 200支持的导出模式有Local和Remote模式。

  • Remote模式:将集群中的业务数据导出到集群之外的主机上。
    支持多个GDS服务并发导出,但1个GDS在同一时刻,只能为1个集群提供导出服务。
    配置与集群节点处于统一内网的GDS服务,导出速率受网络带宽影响,推荐的网络配置为10GE。
    支持数据文件格式:TEXT、CSV和FIXED。单行数据大小需<1GB。
  • Local模式:将集群中的业务数据导出到集群节点所在主机上。一种专门为大量小文件而定制的一种策略。
    数据将均匀切割并生成到集群节点上指定的文件夹下,需占用集群节点的磁盘空间。
    支持数据文件格式:TEXT、CSV和FIXED。单行数据大小需<1GB。
    GaussDB 200使用GDS服务导入导出数据_第7张图片
  • 创建外表
    SQL如下图:
    GaussDB 200使用GDS服务导入导出数据_第8张图片
  • 导出数据
    rhnschema=# insert into f_rhnpackagerepodata select *from rhnpackagerepodata;
    INSERT 0 94519

    GaussDB 200使用GDS服务导入导出数据