利用kettle实现遗留数据库迁移 -欧洲杯足彩官网

`
wiselyman
  • 浏览: 2076998 次
  • 性别:
  • 来自: 合肥
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 博客专栏
    点睛spring4.1
    浏览量:80745
    点睛spring mvc4...
    浏览量:129940
    社区版块
    • ( 11)
    • ( 19)
    • ( 0)
    存档分类
    最新评论

    利用kettle实现遗留数据库迁移

    1. kettle的简单介绍

    kettle(现名data integration)是一款使用java编写的功能强大的etl(extract transform and load)工具,支持关系型数据库(postgresqlmysqloracle等)、非关系型数据库(mongodbelasticsearch等)以及文件之间的大规模数据迁移。

    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 stepfirst step中进行融合的字段
    • keys for 2nd stepsecond 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表中新增了districtcityprovince字段,他们可以从老数据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

    数据迁移前的分析:

    1. company表数据来源于三张表:companycompany_districtdistrict,因此需要三个table input组件。
    2. companycompany_district需进行joinjoin的结果还需和district进行join,因此需要两个merge join组件。
    3. 使用merge join组件之前需进行排序,因此需要三个sort rows组件
    4. 新的company表的id来源于自增长序列,因此需要一个add sequence组件。
    5. 最后将结果导入新的company表,因此需要一个table output组件。
    • 打开kettle,点击file->new->transformation,新建一个转换流程
    • 点击左侧designtab页,将table input组件拖拽至右侧转换流程窗口,在组件上右键点击edit,弹出该组件的编辑窗口,设置步骤名称、数据库连接和sql语句,如下图所示:

    • companycompany_district数据进行left joinjoin之前需按照join字段排序,将sort rows组件拖拽至右侧转换流程窗口,并进行编辑,如下图所示:

    • merge join组件拖拽至右侧,并进行编辑,如下图所示:

    • companycompany_districtmerge join的结果和district数据分别进行排序,同上面步骤

    • 将两者进行join,同上面步骤

    • 添加add sequence组件,并进行编辑,如下图所示:

    • 添加table output组件,并进行编辑,如下图所示:

    • 整体流程如下图所示:

    • 点击启动按钮执行整个流程,直至所有步骤右上角出现绿色的箭头,company表便完成了迁移。

    3.3.2 employee

    数据迁移前的分析:

    1. employee表数据来源三张表: 老的employee、老的employee_company和新的company,因此需要三个table input组件
    2. 老的employeeemployee_company需进行joinjoin的结果还需和新的company进行join,因此需要两个merge join组件和三个sort rows组件。
    3. 新的employee表的id来源于自增长序列,因此需要一个add sequence组件。
    4. 新的employee表的sex字段存储的是'男/女',而不是'1/2',因此需要一个modified java script value组件进行简单处理。
    5. 最后将结果导入新的employee表,因此需要一个table output组件。
    • company的数据迁移类似,添加三个table input组件,并进行编辑
    • 分别将employeeemployee_company按照join字段进行统一排序
    • 将排序的结果进行join
    • 分别将新的companyjoin之后的结果按照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",重启即可。


    源码地址: 

    0
    2
    分享到:
    评论

    相关推荐

      该方案是将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

    global site tag (gtag.js) - google analytics
    网站地图