使用Kettle迁移BigQuery至DWS集群
本实践演示如何使用开源工具Kettle将BigQuery数据迁移到DWS。其中,元数据通过DSC进行语法转换后迁移,历史和增量数据采用Kettle工具迁移。
了解Kettle,请参见了解Kettle。
本实践预计时长90分钟,演示迁移BigQuery的基本流程如下:
- 迁移前准备:准备迁移工具Kettle和相关套件包,并获取BigQuery的JSON key文件。
- 步骤一:配置BigQuery和DWS的连接:使用Kettle新建两个数据库连接,连通BigQuery和DWS。
- 步骤二:迁移元数据:使用DSC工具进行迁移。
- 步骤三:迁移全量业务数据:迁移全量历史数据。
- 步骤四:迁移全量业务数据:迁移增量数据。
- 步骤五:并发执行迁移作业:创建一个job,用于并发执行多个transformation任务,达到并发迁移多张表的目的。
- 步骤六:表数据校验:迁移后数据一致性验证。
约束与限制
- 不支持整个数据库迁移。
- 支持单表迁移,如需多表同时迁移,可将多个转换配置在一个Job里进行。
前提条件
安装JDK 11或以上版本,并配置相关环境变量。
迁移前准备
- 参见使用开源Kettle导入数据完成Kettle安装和dws-client配置。
- 安装和配置完Kettle后,进入Kettle文件夹data-integration\lib目录下,删除guava-17.0文件,即可进行BigQuery连接。
- 获取谷歌云端JSON key文件,用于配置Kettle。
以下操作仅供参考,具体请访问谷歌云官网。
- 登录谷歌云,在产品中选择IAM。
- 左侧导航选择“服务账号”,在服务账号列表中选择一个服务账号,单击右侧的
,选择“管理密钥”。如果没有服务账号,请先创建一个。
- 选择“创建新密钥 > JSON”,单击“创建”,将密钥保存在本地,拷贝本地存放路径。
步骤一:配置BigQuery和DWS的连接
- 打开Kettle解压后的文件夹data-integration,双击Spoon.bat,启动Kettle。
如果运行失败,请检查JDK版本是否为JDK 11及以上。
- 选择“File > New > Transformation”。
- 在新创建的“Transformation xx”下面,选择“View”,双击“Database connections”。
- 在弹出的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
- 左侧选项框,切换到“Options”,按顺序添加以下信息。
- OAuthServiceAcctEmail:谷歌云IAM中对应项目中服务账号生成JSON Key的邮箱地址。
- OAuthPvtKeyPath:本地存放JSON Key的地址。
- OAuthType:配置为0。
- 单击“Test”。
- 显示连接成功后,单击“OK”。
连接时可能会因为客户端无法找到jar包导致连接失败,需要访问官网,选择最新JDBC驱动包下载,解压后放入data-integration\lib文件夹中,再次删除guava-17.0文件,重启客户端再连接。
- 继续右键“Transformation xx”下面的“Database connections”,单击“New”,配置目的端数据库连接。
- 左侧选择“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用户的密码。
- 左侧切换“Options”,添加以下参数。
stringtype:unspecified
- 确认参数后,单击“Test”,连通成功后,单击“OK”。
- 双击“Transformation xx”名称,切换到“Monitoring”页签,配置“Step performance measurement interval (ms)”为1000,优化Kettle处理性能。
步骤二:迁移元数据
通过华为自研工具DSC进行迁移,将BigQuery源端导出的元数据的DDL语句转成DWS中可执行的SQL。
- 导出元数据及增量元数据。
- 执行以下SQL获取表信息。
1
SELECT * FROM Information_schema.tables
- 再使用以下语句获取表的DDL。
1
SELECT ddl FROM `project.dataset.INFORMATION_SCHEMA.TABLES` WHERE table_name = 'your_table_name'
并将查询出的结果导出。
- 如果元数据有变动,可通过以下SQL查出最新改动的表。
1
SELECT * FROM Information_schema.tables ORDER BY last_modified_time DESC;
按照1.b的方式导出元数据,和DWS中的进行对比,通过DSC转换,删除现有表,执行新的DDL,再进行整表迁移。
- 执行以下SQL获取表信息。
- 参见DSC配置章节配置DSC工具。
- 使用DSC完成DDL转换。
- 连接DWS数据库,执行转换后的DDL进行目标表创建。
步骤三:迁移全量业务数据
- Kettle左侧框内选择“Design > Input > Table input”。
- 双击“Table input”,“Connection”选择步骤一:配置BigQuery和DWS的连接中配置的Bigquery连接名称,下方SQL编辑框内输入查询SQL即可。
- 单击“OK”,表输入信息创建成功。
- 左侧框内选择“Design > Output > Table output”。
- 双击“Table output”,填写以下信息。
- Connection:选择步骤一:配置BigQuery和DWS的连接中配置的DWS连接名称。
- Target schema:填写对应的schema。
- Target table:填写对应的表名。
- Truncate table:如果多次全量迁移同一张表,需要勾选,否则忽略。
- 单击“OK”,表输出信息创建成功。
- 在右侧面板中,鼠标悬停在“Table input”,拖拽箭头指向“Table output”。
- 单击
,开始运行作业。
步骤四:迁移全量业务数据

增量迁移和全量迁移的步骤大致相同,区别在于源端SQL中增加了where条件。
- 配置BigQuery源端,在右侧面板中,右键“Table input”,数据库选择源端数据库连接,SQL语句中增加where条件查询增量数据。
注意:此种方法适用于表中带有明确区分时间的字段,如果没有区分时间字段但是有分区请按照分区导入,没有分区请删除所有数据并全量导入。图1 编辑“表输入”
- 配置目标端,右键“Table output”进行编辑。
图2 编辑“表输出”
- 配置好后单击
,开始执行迁移任务。
步骤五:并发执行迁移作业
Job任务配置,就是将上面配置好的多张表的Transformation放到一个任务里面执行,达到多并发执行的目的,从而提高执行效率。
- 选择“File > New > Job”,拖拽相应的组件到面板,用连接线连接到一起,如下图所示。
图3 新建job
- 分别双击配置相应的Transformation,选择之前已经配置保存好的转换任务,如下图所示。
图4 配置transformation
- 右键Start组件,勾选Run Next Entries in Parallel组件,设置任务并发执行,如下图所示。
图5 设置并发
设置成功后,Start组件和Transformation组件之间会多一个双斜杠,如下图所示。
图6 设置并发成功 - 单击Run,开始并发执行转换任务。
图7 执行并发Run
步骤六:表数据校验
迁移完成之后,可使用数据校验工具DataCheck校验源端、目标端的数据是否一致。
- 准备一台ECS(安装系统可以选择Linux或Windows),且确保ECS配置弹性公网IP可以访问BigQuery。
- 下载软件包后,上传到ECS指定位置(用户可自定义),解压DataCheck-*.zip包,进入DataCheck-*目录,即可使用。目录下各文件的使用说明参见表1。
- 配置工具包。
- 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]。
- Windows环境下:
- 执行数据校验。
Windows环境下:
- 打开check_input.xlsx文件,将要校验的Schema、源表、目标端表填入,Row Range可根据需要填写特定范围的数据查询语句。
- 校验级别Check Strategy支持high、middle、low三种,若未填写,默认为low。
- 校验模式Check mode支持statistics,即统计值校验。
下图为元数据对比的check_input.xlsx文件。
图9 check_input.xlsx - 在bin目录下使用命令datacheck.bat执行校验工具:
- 查看已生成的校验结果 check_input_result.xlsx:
校验结果分析:
- Status结果为No Pass代表校验未通过。
- Check Result Diff列显示数值校验中的avg不同,DWS为61.5125,源数据库为61.5000。
- Check SQL中显示具体执行的校验命令。
Linux环境下:
- 编辑check_input.xlsx文件并上传,参考Window环境下的第一步。
- 使用命令sh datacheck.sh执行校验工具。
- 查看校验结果check_input_result.xlsx(校验结果分析与Windows场景相同)。
- 打开check_input.xlsx文件,将要校验的Schema、源表、目标端表填入,Row Range可根据需要填写特定范围的数据查询语句。