文档首页/ 数据仓库服务 DWS/ 最佳实践/ 数据迁移/ 使用Kettle迁移BigQuery至DWS集群
更新时间:2025-09-11 GMT+08:00
分享

使用Kettle迁移BigQuery至DWS集群

本实践演示如何使用开源工具Kettle将BigQuery数据迁移到DWS。其中,元数据通过DSC进行语法转换后迁移,历史和增量数据采用Kettle工具迁移。

了解Kettle,请参见了解Kettle

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

  1. 迁移前准备:准备迁移工具Kettle和相关套件包,并获取BigQuery的JSON key文件。
  2. 步骤一:配置BigQuery和DWS的连接:使用Kettle新建两个数据库连接,连通BigQuery和DWS。
  3. 步骤二:迁移元数据:使用DSC工具进行迁移。
  4. 步骤三:迁移全量业务数据:迁移全量历史数据。
  5. 步骤四:迁移全量业务数据:迁移增量数据。
  6. 步骤五:并发执行迁移作业:创建一个job,用于并发执行多个transformation任务,达到并发迁移多张表的目的。
  7. 步骤六:表数据校验:迁移后数据一致性验证。

约束与限制

  • 不支持整个数据库迁移。
  • 支持单表迁移,如需多表同时迁移,可将多个转换配置在一个Job里进行。

前提条件

安装JDK 11或以上版本,并配置相关环境变量。

迁移前准备

  1. 参见使用开源Kettle导入数据完成Kettle安装和dws-client配置。
  2. 安装和配置完Kettle后,进入Kettle文件夹data-integration\lib目录下,删除guava-17.0文件,即可进行BigQuery连接。

  3. 获取谷歌云端JSON key文件,用于配置Kettle。

    以下操作仅供参考,具体请访问谷歌云官网。
    1. 登录谷歌云,在产品中选择IAM。
    2. 左侧导航选择“服务账号”,在服务账号列表中选择一个服务账号,单击右侧的,选择“管理密钥”。如果没有服务账号,请先创建一个。
    3. 选择“创建新密钥 > JSON”,单击“创建”,将密钥保存在本地,拷贝本地存放路径。

步骤一:配置BigQuery和DWS的连接

  1. 打开Kettle解压后的文件夹data-integration,双击Spoon.bat,启动Kettle。

    如果运行失败,请检查JDK版本是否为JDK 11及以上。

  2. 选择“File > New > Transformation”。

  3. 在新创建的“Transformation xx”下面,选择“View”,双击“Database connections”。

  4. 在弹出的Database Connection窗口中,左侧选项框选择“General”,按顺序填写以下信息。

    • Connection name:Bigquery
    • Connection type:Google BigQuery
    • Access:Native(JDBC)
    • Host Name:https://www.googleapis.com/bigquery/v2
    • Project ID: 从3生成的json key中获取。
    • Port Number:443

  5. 左侧选项框,切换到“Options”,按顺序添加以下信息。

    • OAuthServiceAcctEmail:谷歌云IAM中对应项目中服务账号生成JSON Key的邮箱地址。
    • OAuthPvtKeyPath:本地存放JSON Key的地址。
    • OAuthType:配置为0。

  6. 单击“Test”。
  7. 显示连接成功后,单击“OK”。

    连接时可能会因为客户端无法找到jar包导致连接失败,需要访问官网,选择最新JDBC驱动包下载,解压后放入data-integration\lib文件夹中,再次删除guava-17.0文件,重启客户端再连接。

  8. 继续右键“Transformation xx”下面的“Database connections”,单击“New”,配置目的端数据库连接。
  9. 左侧选择“General”,配置如下参数:

    • Connection name:DWS
    • Connection type:PostgreSQL
    • Access:Native(JDBC)
    • Host Name:填写DWS的IP地址。例如10.140.xx.xx。
    • Database Name:gaussdb
    • Port Number:8000
    • Username:dbadmin
    • Password:填写DWS的dbadmin用户的密码。

  10. 左侧切换“Options”,添加以下参数。

    stringtype:unspecified

  11. 确认参数后,单击“Test”,连通成功后,单击“OK”。
  12. 双击“Transformation xx”名称,切换到“Monitoring”页签,配置“Step performance measurement interval (ms)”为1000,优化Kettle处理性能。

步骤二:迁移元数据

通过华为自研工具DSC进行迁移,将BigQuery源端导出的元数据的DDL语句转成DWS中可执行的SQL。

  1. 导出元数据及增量元数据。

    1. 执行以下SQL获取表信息。
      1
      SELECT * FROM Information_schema.tables
      
    2. 再使用以下语句获取表的DDL。
      1
      SELECT ddl FROM `project.dataset.INFORMATION_SCHEMA.TABLES` WHERE table_name = 'your_table_name'
      

      并将查询出的结果导出。

    3. 如果元数据有变动,可通过以下SQL查出最新改动的表。
      1
      SELECT * FROM Information_schema.tables ORDER BY last_modified_time DESC
      

      按照1.b的方式导出元数据,和DWS中的进行对比,通过DSC转换,删除现有表,执行新的DDL,再进行整表迁移。

  2. 参见DSC配置章节配置DSC工具。
  3. 使用DSC完成DDL转换。

    1. 在DSC工具的input文件夹下放入需要转换的SQL文件。
    2. 打开cmd命令行,进入DSC对应目录下。

    3. 执行runDSC脚本(Linux环境执行runDSC.sh)。
      runDSC.bat -S mysql

    4. 在DSC工具的output目录下,查看转换结果及日志。

      转换前DDL:

      转换后DDL:

  4. 连接DWS数据库,执行转换后的DDL进行目标表创建。

步骤三:迁移全量业务数据

  1. Kettle左侧框内选择“Design > Input > Table input”。
  2. 双击“Table input”,“Connection”选择步骤一:配置BigQuery和DWS的连接中配置的Bigquery连接名称,下方SQL编辑框内输入查询SQL即可。

  3. 单击“OK”,表输入信息创建成功。
  4. 左侧框内选择“Design > Output > Table output”。
  5. 双击“Table output”,填写以下信息。

    • Connection:选择步骤一:配置BigQuery和DWS的连接中配置的DWS连接名称。
    • Target schema:填写对应的schema。
    • Target table:填写对应的表名。
    • Truncate table:如果多次全量迁移同一张表,需要勾选,否则忽略。

  6. 单击“OK”,表输出信息创建成功。
  7. 在右侧面板中,鼠标悬停在“Table input”,拖拽箭头指向“Table output”。

  8. 单击,开始运行作业。

步骤四:迁移全量业务数据

增量迁移和全量迁移的步骤大致相同,区别在于源端SQL中增加了where条件。

  1. 配置BigQuery源端,在右侧面板中,右键“Table input”,数据库选择源端数据库连接,SQL语句中增加where条件查询增量数据。

    注意:此种方法适用于表中带有明确区分时间的字段,如果没有区分时间字段但是有分区请按照分区导入,没有分区请删除所有数据并全量导入。
    图1 编辑“表输入”

  2. 配置目标端,右键“Table output”进行编辑。

    图2 编辑“表输出”

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

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

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

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

    图3 新建job

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

    图4 配置transformation

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

    图5 设置并发

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

    图6 设置并发成功

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

    图7 执行并发Run

步骤六:表数据校验

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

  1. 准备一台ECS(安装系统可以选择Linux或Windows),且确保ECS配置弹性公网IP可以访问BigQuery。
  2. 下载软件包后,上传到ECS指定位置(用户可自定义),解压DataCheck-*.zip包,进入DataCheck-*目录,即可使用。目录下各文件的使用说明参见表1
  3. 配置工具包。

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

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

      encryption.bat password

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

    • Linux环境下

      解压DataCheck包后,进入到properties所在路径:

      cd /DataCheck/conf
      cat dbinfo.properties

      配置properties文件如下:

      密文生成方法与上文中Window环境下的方法类似,命令为sh encryption.sh [password]

  4. 执行数据校验。

    Windows环境下

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

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

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

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

      校验结果分析:

      • Status结果为No Pass代表校验未通过。
      • Check Result Diff列显示数值校验中的avg不同,DWS为61.5125,源数据库为61.5000。
      • Check SQL中显示具体执行的校验命令。

    Linux环境下

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

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

相关文档