Kettle:SqlServer批量导入数据到Mysql

系列文章目录


前言

Kettle是一款开源的大数据ETL工具,功能很强大,但功能也很复杂;相应的网上也有很多基础教程和ETL的Blogs,此处不在赘述。
本文主要记录工作中的一次使用Kettle进行同步数据到Mysql的实施过程。


一、总体流程

  • 涉及2个工作流、4个转换算子:
  • 主工作流:串联全流程
  • 子工作流:执行单表同步流程
  • 转换一:从指定表中获取所有需要同步的原表及对应的目标表
  • 转换二:设置原表名、目标表名到环境变量中
  • 转换三:根据原表的ddl生成目标表的ddl,并保存到环境变量中
  • 转换四:从原表中读取数据写入到目标表

二、详细设计

1. 转换一:读取ETL表配置

从指定的表中查询需要迁移的所有表配置,可以从表、导入文件等等多种途径进行配置。
从配置中读取迁移配置的目的在于过滤,因为sqlserver可能存在系统表中记录有临时表,但是该session没有办法查询到临时表的ddl。

在这里插入图片描述

  • etl_job_config:从指定的表中查询需要迁移的表
  • collect:过滤需要的字段source_id、target_id
  • copy rows to result:将查询结果写入到result中
-- etl_job_config
SELECT
  id
, job_id
, source_id
, target_id
, source_config_id
, target_config_id
FROM dbo.etl_job_config
where is_pull = 0

2. 转换二:表配置写入环境变量

从转换一中写入结果中读取信息,写入到环境变量中
source_id -> SOURCE_ID
target_id -> TARGET_ID

在这里插入图片描述

3. 转换三:生成DDL

根据source_id,通过sql拼接出目标表的ddl,并将ddl预计写入到环境变量“DDL”
使用表输入进行脚本查询输出,SQL节点只能用于DDL执行,不会返回结果。

在这里插入图片描述

declare @table varchar(100) = '${SOURCE_ID}'
declare @sql table(s varchar(1000), id int identity)
-- 创建语句
insert into  @sql(s) values ('create table if not exists ${TARGET_ID} (')

-- 获取注释
SELECT A.name  AS table_name,
       B.name  AS column_name,
       C.value AS column_description
into #columnsproperties
FROM sys.tables A
         INNER JOIN sys.columns B ON B.object_id =<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值