Kettle 全量抽取数据

本例子,来源表是一个oracle视图,目的表是一个oracle表,采用“表输入—表输出”进行ETL。

1.在Spoon中,打开核心对象——表输入

        数据库连接中选择  DB连接中的视图,SQL语句是相关的视图,需要哪些字段、过滤哪些条件,都是在SQL里面设置。如下图所示。

2.在Spoon中,打开核心对象——表输出

        选择数据库连接,目标模式是oracle的用户(即导入哪个用户),目标是:新建表名。

       执行SQL语句就会在oracle数据库的用户下面新建表格。如下图所示。

一定要通过kettle这个选项来建立这个表,要不,插入/更新速度非常慢。因为通过kettle建表,优化了某些表的性能。(具体是什么)

3.开始执行

4.执行过程和结果,总共50分钟,导入1800万条记录。 

总结

 kettle的性能
        kettle本身的性能绝对是能够应对大型应用的,一般的基于平均行长150的一条记录,假设源数据库,目标数据库以及kettle都分别在几台机器上(最常见的桌面工作模式,双核,1G内存),速度大概都可以到5000 行每秒左右,如果把硬件提高一些,性能还可以提升 , 但是ETL 过程中难免遇到性能问题,下面一些通用的步骤也许能给你一些帮助.
        尽量使用数据库连接池
        尽量提高批处理的commit size
        尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流)
        Kettle 是Java 做的,尽量用大一点的内存参数启动Kettle.
        可以使用sql 来做的一些操作尽量用sql 
       Group , merge , stream lookup ,split field 这些操作都是比较慢的,想办法避免他们,能用sql 就用sql
       插入大量数据的时候尽量把索引删掉
       尽量避免使用update , delete 操作,尤其是update , 如果可以把update 变成先delete ,  后insert .
       能使用truncate table 的时候,就不要使用delete all row 这种类似sql
合理的分区
       如果删除操作是基于某一个分区的,就不要使用delete row 这种方式(不管是delete sql 还是delete 步骤),直接把分区drop 掉,再重新创建
       尽量缩小输入的数据集的大小(增量更新也是为了这个目的)
       尽量使用数据库原生的方式装载文本文件(Oracle 的sqlloader , mysql 的bulk loader 步骤)
       尽量不要用kettle 的calculate 计算步骤,能用数据库本身的sql 就用sql ,不能用sql 就尽量想办法用procedure , 实在不行才是calculate 步骤.
       要知道你的性能瓶颈在哪,可能有时候你使用了不恰当的方式,导致整个操作都变慢,观察kettle log 生成的方式来了解你的ETL操作最慢的地方。
      远程数据库用文件+FTP 的方式来传数据 ,文件要压缩。(只要不是局域网都可以认为是远程连接)

           

 

  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值