1. kettle
的简单介绍
kettle
(现名data integration
)是一款使用java
编写的功能强大的etl
(extract transform and load
)工具,支持关系型数据库(postgresql
、mysql
、oracle
等)、非关系型数据库(mongodb
、elasticsearch
等)以及文件之间的大规模数据迁移。
2. 常用组件
kettle
提供了极为丰富的组件库,下面列举的是它的一些常用组件,以及对组件的常用参数进行简单介绍,详细的参数说明可参考kettle
的帮助文档。
2.1 table input
指定数据库表作为输入。
-
step name
: 步骤名称,kettle
的每一个组件即一个步骤,可为该步骤取一个别名 -
connection
: 指定数据库连接 -
sql
: 编写sql
,从该数据库表中筛选出符合条件的数据
2.2 table output
指定数据库表作为输出
-
step name
: 步骤名称 -
connection
: 指定数据库连接 -
target schema
: 输出的数据库表模式 -
target table
: 指定输出的数据库表 -
use batch update for inserts
: 是否使用批处理进行插入 -
database fields
: 配置字段映射关系-
table field
: 输出的数据库表字段 -
stream field
: 流字段(流入该组件的数据字段)
-
2.3 sort rows
按照某字段进行排序
-
step name
: 步骤名称 -
fields
:-
fieldname
: 排序的字段名 -
ascending
: 排序方式
-
2.4 merge join
将不同来源数据进行融合,类似于
sql
中的join
,注意: 该组件接收的数据必须按照join
字段按照相同规则进行排序,否则join
后的数据会有丢失。
-
step name
: 步骤名称 -
first step
: 需要融合的一组数据 -
second step
: 需要融合的另一组数据 -
join type
: 融合的类型 -
keys for 1st step
:first step
中进行融合的字段 -
keys for 2nd step
:second step
中进行融合的字段
2.5 add sequence
读取指定的序列值
-
step name
: 步骤名称 -
name of value
: 序列值别名 -
use db to get sequence
: 是否使用数据库序列 -
connnection
: 数据库连接 -
schema name
: 数据库模式名称 -
sequence name
: 序列名
2.6 modified java script value
支持编写
javascript
脚本,用于实现必要的业务逻辑
-
step name
: 步骤名称 -
java script functions
: 提供了一些javascript
函数 -
java script
: 脚本编辑窗口 -
fields
: 可将脚本中的定义的变量映射出去
3. 在实际场景中的应用
在软件开发中,经常会遇到这样的场景: 新开发的系统即将替换老系统,而老系统庞大的数据需迁移到新系统中,但数据结构与新系统不完全兼容,下面通过一个简单的例子来介绍
kettle
是如何处理这些老数据,完成数据迁移任务的。
3.1 老数据结构
-
company
公司表:
-
district
区域表:该表存储了省市区,通过parent_id进行关联
-
company_district
公司区域表: -
employee
员工表: -
employee_company
员工公司表:
3.2 新数据结构
-
company
公司表:对比老数据
company
表,新的company
表中新增了district
、city
、province
字段,他们可以从老数据company_district
表和district
表中取得;contact
字段对应tel
字段;addr
对应address
。 -
employee
员工表:对比老数据
employee
表,新的employee
表中新增company_id
字段且有外键约束;sex
字段由原来的1、2变更为男、女
3.3 数据迁移
由于
employee
有外键关联company
,因此先迁移company
表数据,新的company
表需新增old_id
字段来保存老的company
表的id
,用于员工关联公司。
3.3.1 company
表
数据迁移前的分析:
company
表数据来源于三张表:company
、company_district
、district
,因此需要三个table input
组件。company
和company_district
需进行join
,join
的结果还需和district
进行join
,因此需要两个merge join
组件。- 使用
merge join
组件之前需进行排序,因此需要三个sort rows
组件- 新的
company
表的id来源于自增长序列,因此需要一个add sequence
组件。- 最后将结果导入新的
company
表,因此需要一个table output
组件。
- 打开
kettle
,点击file
->new
->transformation
,新建一个转换流程 - 点击左侧
design
tab
页,将table input
组件拖拽至右侧转换流程窗口,在组件上右键点击edit
,弹出该组件的编辑窗口,设置步骤名称、数据库连接和sql
语句,如下图所示:
-
将
company
和company_district
数据进行left join
,join
之前需按照join
字段排序,将sort rows
组件拖拽至右侧转换流程窗口,并进行编辑,如下图所示: -
将
merge join
组件拖拽至右侧,并进行编辑,如下图所示: -
将
company
和company_district
merge join
的结果和district
数据分别进行排序,同上面步骤 -
将两者进行
join
,同上面步骤 -
添加
add sequence
组件,并进行编辑,如下图所示: -
添加
table output
组件,并进行编辑,如下图所示: -
整体流程如下图所示:
-
点击启动按钮执行整个流程,直至所有步骤右上角出现绿色的箭头,
company
表便完成了迁移。
3.3.2 employee
表
数据迁移前的分析:
employee
表数据来源三张表: 老的employee
、老的employee_company
和新的company
,因此需要三个table input
组件- 老的
employee
和employee_company
需进行join
,join
的结果还需和新的company
进行join
,因此需要两个merge join
组件和三个sort rows
组件。- 新的
employee
表的id来源于自增长序列,因此需要一个add sequence
组件。- 新的
employee
表的sex
字段存储的是'男/女',而不是'1/2',因此需要一个modified java script value
组件进行简单处理。- 最后将结果导入新的
employee
表,因此需要一个table output
组件。
- 与
company
的数据迁移类似,添加三个table input
组件,并进行编辑 - 分别将
employee
和employee_company
按照join
字段进行统一排序 - 将排序的结果进行
join
- 分别将新的
company
和join
之后的结果按照join
字段进行统一排序 - 将排序的结果进行
join
- 编写脚本,转换
sex
字段
- 读取新的
employee
序列值 - 输出到新的
employee
表中 -
整体流程如下图所示:
-
点击启动按钮执行整个流程,直至所有步骤右上角出现绿色的箭头,
employee
表便完成了迁移。
3.4 结果
-
company
表 -
employee
表
至此,便完成了老数据的迁移。
4. 遇到的问题
在
kettle
使用过程中会发现,当需要进行迁移的数据量较为庞大时(千万级),常常会出现内存溢出
的问题,解决方法是将kettle
内存调高些: 打开spoon.sh
文件,找到pentaho_di_java_options="-xms1024m -xmx2048m -xx:maxpermsize=256m"
,将其修改为pentaho_di_java_options="-xms16384m -xmx32768m -xx:maxpermsize=16384m"
,重启即可。
源码地址:
相关推荐
该方案是将oracle数据库迁移到mysql数据库中,也支持oracle、mysql等多种数据库的相互迁移
kettle完整流程实现数据库迁移,包括获取表名称,创建表,抽取表数据。
该实例主要完成sqlserver数据库表信息到oracle数据库表的一次数据迁移,用kettle工具(简称水壶)编写好转换文件后保存,最后执行转化,即可完成数据库表的数据迁移。运行该实例你需下载kettle工具,并对实例中的...
kettle 连接 clickhouse数据库 所有包
包含 sqlserver mysql access 。。。。等驱动都有。
kettle的一套流程完成对整个数据库迁移,亲测使用,绝对对大家的工作有帮助。
使用pentaho data integration 5.0.3整合sql server数据库和salesforce数据的一个demo,包括ppt,kettle文件及所有数据库backup文件及参考文档及代码。
kettle连接数据库需要相应的驱动这里面有:oracle,mysql,sqlserver,access的驱动,以及连接access的方法
kettle同步数据库表数据到其他库的相同表名中,还可以指定特定的表名,只要在获取表中,输入特定表名,就只会同步输入的表
集合了常用的oracle、mysql、sqlserver驱动
ettle是一款国外开源的etl工具,纯java编写,可以在window、linux、unix等上...其中,spoon是kettle中的一个组件,其他组件有pan,chef,encr和kitchen等。 spoon通过图形化的页面,方便直观的让你完成数据转换的操作
kettle链接oracle数据库比较坑,为试了很多驱动都不能正常驱动,一会报没有发现驱动,一会报字符集问题,我找我们公司大佬要了一个驱动,直接可以驱动起来,特此分享! 备注:解压jdbc压缩文件,将里面所有的jar...
使用kettle重复的画着:表输入-表输出、创建表,很烦恼。 实现了一套通用的数据库迁移流程。 做一个批量抽取的job
使用kettle同步数据库表。网上找教程找了一天。终于弄好了。将两个数据库连接改成你自己的。sql也要改,然后把后面步骤的字段重新获取一下。然后就可以同步数据了。数据来源表增删改都可以同步。参考一下吧
使用kettle创建job流程,完成对整套数据库的迁移操作
利用kettle和oracle数据库进行多表全量同步教程
kettle实现多张表数据的定时删除全量抽取,删除旧shuju
解压clickhouse-plugins文件夹放入到plugins目录,其余jar放到libswt目录对应的系统版本文件夹中,重启kettle后即可连接clickhouse数据库
mysql、oracle、sqlserver、greenplum、mongodb、cassandra