文档首页/ 数据仓库服务 DWS/ 最佳实践/ 数据迁移/ 使用Kettle迁移AWS Redshift小表到DWS集群
更新时间:2025-08-22 GMT+08:00
分享

使用Kettle迁移AWS Redshift小表到DWS集群

本实践演示如何使用开源工具Kettle将Redshift数据迁移到DWS。

了解Kettle

Kettle是一个开源的ETL(Extract-Transform-Load)工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。它提供了一个可视化的图形化界面,使用户能够通过拖放和连接组件来设计和配置ETL流程。支持多种数据源和目标,包括关系型数据库、文件、API、Hadoop等。Kettle提供了丰富的转换和清洗功能,可以对数据进行格式转换、数据过滤、数据合并、数据计算等操作。

它的主要功能如下:

  • 无代码拖拽式构建数据管道。
  • 多数据源对接。
  • 数据管道可视化。·
  • 模板化开发数据管道。
  • 可视化计划任务。
  • 深度Hadoop支持。
  • DWS需要绑定公网IP后才能与Kettle连接使用。
  • Kettle和云数据迁移(Cloud Data Migration,简称CDM)都适用于批处理场景,当数据量或表数量较小时,推荐使用kettle,反之使用CDM。
  • 支持从数据库导出数据到文件,也支持将数据导入到数据库。
  • Kettle可通过建立触发器、时间戳字段、Kafka等方式实现数据实时同步。

本实践预计时长90分钟,演示迁移Redshift的基本流程如下:

  1. 迁移前准备:准备迁移工具Kettle和相关套件包。
  2. 步骤一:元数据迁移:使用DSC工具进行迁移。
  3. 步骤二:新建Transformation并配置源端数据库和目标数据库:创建一个transformation任务,配置好源端和目标端数据库。
  4. 步骤三:迁移数据:包括全量迁移、增量迁移。
  5. 步骤四:并发执行迁移作业:创建一个job,用于并发执行多个transformation任务,达到并发迁移多张表的目的。
  6. 步骤五:优化迁移作业:通过调整Kettle内存大小和Job的任务数量,提高迁移效率。
  7. 步骤六:表数据校验:迁移后数据一致性验证。

迁移前准备

  • 已经购买了DWS集群,并已绑定弹性公网IP,并已规划创建好目标数据库dws_vd
  • 已获取DSC工具包,下载并安装DSC
  • 已获取DataCheck工具包,下载并安装DataCheck
  • 已获取Kettle工具包和dws-client相关插件,并配置好Kettle,参见使用开源Kettle导入数据的“准备Kettle环境”和“安装dws-client自定义插件”部分。
  • 已安装JDK 1.8环境,并配置相关环境变量。

步骤一:元数据迁移

使用华为云自研工具DSC迁移,将Redshift中客户源端导出的样例表的DDL语句转成DWS中可执行的SQL。

  1. 解压获取到的DSC工具包,将需要转换的文件放入DSC的input目录下。

    Redshift表结构设计中不含索引,影响性能的关键点取决于DDL中的数据分布键DISTSTYLE和排序键SORTKEY。

    图1 DDL语句

  2. 自定义配置features-pg.properties文件。

    图2 features-pg.properties文件

  3. 进入到DSC对应目录下,执行runDSC脚本。Windows环境下双击runDSC.bat。(Linux环境下执行runDSC.sh。)
  4. 执行以下命令进行语法转换。

    1
    runDSC.bat -S postgres
    
    图3 DSC转换

  5. 查看结果及转换信息。

    图4 转换结果

  6. 连接DWS,执行上一步转换完成的DDL语句,完成建表。

    DSC更多内容请参见DSC工具使用指导

步骤二:新建Transformation并配置源端数据库和目标数据库

  1. 在Kettle工具部署好后,双击Kettle工具data-integration目录下的Spoon脚本启动Kettle工具。

    图5 启动Kettle

    双击后出现如下界面。

    图6 Kettle界面

  2. 选择“File > New > Transformation”,创建一个新的转换。

    图7 新建transformation

  3. 单击view下面的Database connection,右键单击new,配置源端和目的端的数据库连接。

    • 源端redshift-VD库连接配置如下:
      • jdbc:redshift://dwdsi-simulacao.cslagxelrdnm.us-east-1.redshift.amazonaws.com:xxxx/dsidw
      • Username: xxxxxxx
      • Password:xxxxxxx
      图8 配置源端
    • 目的端DWS-VD库连接配置如下:
      • Host Name: DWS的弹性公网IP。
      • Database Name:dws_vd
      • Username:dbadmin
      • Password:dbadmin用户的密码。
      图9 配置目标端
      图10 options

      数据库连接成功后,分别右键单击源端和目的端连接,再单击share共享该连接,这样在后续的任务配置中就无需再配置数据库连接。

  4. 分别将Design下面Input和Output目录下的Table input组件和DWS TableOutput组件拖到右侧面板中。
  5. 右键单击Table input组件的连接线,将两个组件连接起来。

    图11 连接组件

步骤三:迁移数据

全量数据迁移

  1. 右键编辑Table input,数据库选择源端数据库连接。

    图12 编辑Table input

  2. 右键编辑DWS TableOutput,数据库选择目的端数据库连接。勾选Turncate table、Specify database fields,同时选择Database fields下的Get fields获取源端和目的端的字段映射连接,单击OK。

    图13 编辑Table output
    图14 编辑Database fields

  3. 配置好后单击Run,开始执行迁移任务。

    图15 执行Run

增量数据迁移

增量迁移和全量迁移的步骤大致相同,区别在于源端SQL中增加了where条件,目的端配置去掉了勾选Truncate table。

  1. 右键编辑Table input,数据库选择源端数据库连接。

    图16 编辑Table input

  2. 右键编辑DWS TableOutput,数据库选择目的端数据库连接。去勾选Truncate table,同时选择Database fields 下的Get fields获取源端和目的端的字段映射连接,单击OK。

    图17 编辑TableOutput

  3. 配置好后单击Run,开始执行迁移任务。

    图18 执行Run

步骤四:并发执行迁移作业

Job任务配置,就是将上面配置好的多张表的Transformation放到一个任务里面执行,达到多并发执行的目的,从而提高执行效率。

  1. 选择“File > New >Job”,拖拽相应的组件到面板,用连接线连接到一起,如下图所示。

    图19 新建job

  2. 分别双击配置相应的Transformation,选择之前已经配置保存好的转换任务,如下图所示。

    图20 配置transformation

  3. 右键Start组件,勾选Run Next Entries in Parallel组件,设置任务并发执行,如下图所示。

    图21 设置并发

    设置成功后,Start组件和Transformation组件之间会多一个双斜杠,如下图所示。

    图22 设置并发成功

  4. 单击Run,开始并发执行转换任务。

    图23 执行并发Run

步骤五:优化迁移作业

  1. 配置Kettle内存。

    为了增加Kettle并发数及缓存数据量大小,可以设置Kettle的内存大小。

    用Notpad++打开Spoon.bat脚本,编辑内存相关内容,一般建议为主机内存的60%-80%,如下图所示。

    图24 配置内存

  2. 配置Job。

    • 当表数据量小于千万时,Job调度的表个数建议配置在10个左右。
    • 对于相对大一点的表,例如1亿左右的数据,建议配置2~3个即可,这样配置,即使其中一个任务中途失败,也可以打开相应的转换任务,单独调度,提高效率。
    • 对于数据量超过1亿以上的表,尤其是字段数特别多的表,Kettle抽取效率相对较慢,可以根据业务实际情况选择相应的迁移方式。
      图25 配置Job
    • 在配置任务的时候,尽量将表数据量大致相同的任务放到一个Job中,这样可以保证所有任务执行完成的时间大致相同,不会有拖尾任务,影响下一个job的执行。
    • 如果任务出错,可以查看相应的报错日志,一般情况下遇到的都是源端连接限制导致断开的问题。遇到该情况,可以重启Kettle软件,重试即可。

步骤六:表数据校验

迁移完成之后,可使用数据校验工具DataCheck校验源端、目标端的数据是否一致。

  1. 下载软件包后,解压DataCheck-*.zip包,进入DataCheck-*目录,即可使用。目录下各文件的使用说明参见表1
  2. 配置工具包。

    • Windows环境下
      打开conf文件夹中的dbinfo.properties文件,根据实际需要进行配置。Redshift源的配置参考下图:
      图26 配置DataCheck

      文件中的密码src.passwd和dws.passwd可使用工具,执行以下命令生成密文。

      encryption.bat password

      运行成功后会在本地bin目录下生成加密文件,如下图。

    • Linux环境下

      其他步骤相同。密文生成方法与上文中Window环境下的方法类似,命令为sh encryption.sh [password]

  3. 执行数据校验。

    Windows环境下

    1. 打开check_input.xlsx文件,将要校验的Schema、数据库、源表、目标端表填入,Row Range可根据需要填写特定范围的数据查询语句。
      • 源端的库名在配置文件中配置后,check_input.xlsx文件中的源端会默认填写配置文件中的库名,若check_input.xlsx文件中填入其他库名,以check_input.xlsx文件中的优先级为高。
      • 校验级别Check Strategy支持high、middle、low三种,若未填写,默认为low。
      • 校验模式Check mode支持statistics,即统计值校验。

      下图为元数据对比的check_input.xlsx文件。

      图27 check_input.xlsx
    2. 在bin目录下使用命令datacheck.bat执行校验工具:

    3. 查看已生成的校验结果 check_input_result.xlsx:

      下图为源端元数据与目标端一致的结果。

      下图为源端元数据与目标端不一致的结果。

      统计值校验参考下图。

    Linux环境下

    1. 编辑check_input.xlsx文件并上传,参考Window环境下的第一步。
    2. 使用命令sh datacheck.sh执行校验工具。

    3. 查看校验结果check_input_result.xlsx(校验结果分析与Windows场景相同)。

参考信息

更多参考信息可查看工具指南-DataCheck

表1 DataCheck目录说明

文件或文件夹

说明

DataCheck

bin

保存校验工具入口脚本。

  • Windows版本:datacheck.bat
  • Linux版本:datacheck.sh

conf

配置文件,进行源数据库和目的数据库的连接配置和日志打印设置。

lib

保存校验工具运行所需的相关jar包。

check_input.xlsx

  • 待校验的表信息,包括Schema名、表名、列名等。
  • 记录用户的校验级别信息和校验规则。已支持3种级别校验,包括high、middle、low,默认为low。

logs

压缩包中不包含该文件,校验工具执行后自动生成,记录工具运行过程日志。

check_input_result.xlsx

压缩包中不包含该文件,执行校验工具后会在check_input.xlsx相同路径下生成校验结果文件。

表2 数据校验工具基本功能介绍

DataCheck工具介绍

  • 支持DWS,MySQL,PostgreSQL数据库的数据校验。
  • 支持通用类型字段校验:数值、时间、字符类型。
  • 支持校验级别设置:包括high、middle、low三种。
  • 支持指定schema、表名、列名进行校验。
  • 支持指定记录的校验范围,默认为校验所有记录。
  • 校验方式涉及count(*)、max、min、sum、avg以及抽样明细校验等方式。
  • 输出校验结果和相关校验明细说明。
表3 数据校验级别说明

校验级别

校验说明

校验相关语法

  • 数据数量校验
  • 条数校验: COUNT(*)

  • 数据数量校验
  • 数值类型校验
  • 条数校验: COUNT(*)
  • 数值校验: MAX, MIN, SUM, AVG

  • 数据数量校验
  • 数值类型校验
  • 日期类型校验
  • 字符类型校验
  • 条数校验: COUNT(*)
  • 数值校验: MAX, MIN, SUM, AVG
  • 日期校验: MAX, MIN
  • 字符校验:order by limit 1000,读出数据并校验内容是否相同。

相关文档