更新时间:2022-07-29 GMT+08:00

关于GDS并行导入

INSERT和COPY方式执行数据导入时,是一个串行执行的过程,导入性能低,因此适用于小数据量的导入。对于大数据量的导入,GaussDB(DWS)支持使用GDS工具通过外表并行导入数据到集群。

当前版本的GDS已经支持从管道文件导入数据库,该功能使GDS的导入更加灵活多变。

  • 当GDS用户的本地磁盘空间不足时:
    • 可直接将hdfs上的数据写入到管道文件而不需要占用额外的磁盘空间。
  • 当用户导入前需要清洗数据时:
    • 用户可以根据自己的需求编写程序,将需要处理的数据流式实时的写入管道文件,完成导入的数据清洗工作。
    • 当前版本暂不支持SSL模式下GDS导入,请勿以SSL方式使用GDS。
    • 本章涉及的所有管道文件都是指linux上的命名管道。

概述

并行导入将存储在服务器普通文件系统中的数据导入到GaussDB(DWS)数据库中。暂时不支持将存储在HDFS文件系统上的数据导入GaussDB(DWS)

并行导入功能通过外表设置的导入策略、导入数据格式等信息来识别数据源文件,利用多DN并行的方式,将数据从数据源文件导入到数据库中,从而提高整体导入性能。如图1所示:

  • CN只负责任务的规划及下发,把数据导入的工作交给了DN,释放了CN的资源,使其有能力处理其他外部请求。
  • 所有DN都参与数据导入,这样可以充分利用各设备的计算能力及网络带宽,提升导入效率。
外表灵活的OPTION设置,有利于在数据入库前对数据做预处理,例如非法字符替换、容错处理等。
图1 数据并行导入示意图

上图中所涉及的相关概念说明如下:

  • CN(Coordinator)GaussDB(DWS)协调节点。在导入场景下,接收到应用或客户端的导入SQL指令后,负责任务的规划及下发到DN。
  • DN(Datanode)GaussDB(DWS)数据节点。接收CN下发的导入任务,将数据源文件中的数据通过外表写入数据库目标表中。
  • 数据源文件:存有数据的文件。文件中保存的是待导入数据库的数据。
  • 数据服务器:数据源文件所在的服务器称为数据服务器。基于安全考虑,建议数据服务器和GaussDB(DWS)集群处于同一内网。
  • 外表Foreign Table:用于识别数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。是关联数据文件与数据库实表(目标表)的对象。
  • 目标表:数据库中的实表。数据源文件中的数据最终导入到这些表中存储,包括行存表和列存表。

GDS并发导入

  • 数据量大,数据存储在多个服务器上时,在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。如图2所示。
    图2 多数据服务器并行导入

    GDS进程数目不能超过DN数目。如果超过,会出现一个DN连接多个GDS进程的情形,可能会导致部分GDS异常运行。

  • 数据存储在一台数据服务器上时,如果GaussDB(DWS)及数据服务器上的I/O资源均还有可利用空间时,可以采用GDS多线程来支持并发导入。

    GDS是根据导入事务并发数来决定服务运行线程数的。也就是说即使启动GDS时设置了多线程,也并不会加速单个导入事务。未做过人为事务处理时,一条INSERT语句就是一个导入事务。

    综上,多线程的使用场景如下:

    • 多表并发导入时,采用多线程充分利用资源及提升并发导入效率。
    • 对数据量大的某一事实表的导入进行提速。

      将该事实表对应的数据拆分为多个数据文件,通过多外表同时入库的方式实现多线程并发导入。注意需确保每个外表所能读取的数据文件不重复。

导入流程

图3 GDS并行导入流程
表1 流程说明

流程

说明

准备源数据。

准备需要导入数据库的源数据文件,并上传至数据服务器。

详细内容请参见准备源数据

启动GDS。

在数据服务器上安装配置并启动GDS。

详细内容请参见安装配置和启动GDS

创建外表。

创建外表用于识别数据源文件中的数据。外表中保存了数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。

详细内容请参见创建GDS外表

执行导入数据。

在创建好外表后,通过INSERT语句,将数据快速、高效地导入到目标表中。详细内容请参见执行导入数据

处理错误表。

在数据并行导入发生错误时,请根据具体的错误信息进行处理,以保证导入数据的完整性。

详细内容请参见处理错误表

优化查询效率。

导入数据后,通过ANALYZE语句生成表统计信息。ANALYZE语句会将统计结果自动存储在系统表PG_STATISTIC中。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。

停止GDS

待数据导入完成后,登录每台数据服务器,分别停止GDS。

GDS的停止请参见停止GDS