kettle性能及效率提升

52 篇文章 0 订阅
38 篇文章 1 订阅

Kettle数据处理的过程中难免会遇到性能瓶颈,因此性能及效率的提升成为摆在面前的问题,因此笔者罗列一些常用的优化建议。

  • kettle优化
  • 索引的正确使用
  • 数据抽取SQL优化

kettle优化

  • 尽量使用数据库连接池;
  • 尽量提高批处理的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 的方式来传数据 ,文件要压缩。(只要不是局域网都可以认为是远程连接)。

索引的正确使用

在ETL过程中的索引需要遵循以下使用原则:
当插入的数据为数据表中的记录数量10%以上时,首先需要删除该表的索引来提高数据的插入效率,当数据全部插入后再建立索引。
避免在索引列上使用函数或计算,在where子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描。
避免在索引列上使用 NOT和 “!=” ,索引只能告诉什么存在于表中,而不能告诉什么不存在于表中,当数据库遇到NOT和 “!=” 时,就会停止使用索引转而执行全表扫描。
索引列上用 >= 替代 >
高效:select * from temp where deptno >=4
低效:select * from temp where deptno >3
两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录。

数据抽取的SQL优化。

  • Where子句中的连接顺序。
  • 删除全表是用TRUNCATE替代DELETE。
  • 尽量多使用COMMIT。
  • 用EXISTS替代IN。
  • 用NOT EXISTS替代NOT IN。
  • 优化GROUP BY。
  • 有条件的使用UNION-ALL 替换UNION。
  • 分离表和索引。

        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/zitian886">
                <img src="https://profile.csdnimg.cn/8/1/4/3_zitian886" class="avatar_pic" username="zitian886">
            </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit "><a href="https://blog.csdn.net/zitian886" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;}" target="_blank">紫色架构</a></span>
                    <!-- 等级,level -->
                                            <img class="identity-icon" src="https://csdnimg.cn/identity/blog5.png">                                            </div>
                <div class="text"><span>原创文章 59</span><span>获赞 13</span><span>访问量 11万+</span></div>
            </div>
                            <div class="right-message">
                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;,&quot;extend1&quot;:&quot;个人信息未关注&quot;}">关注</a>
                                                            <a href="https://im.csdn.net/im/main.html?userName=zitian886" target="_blank" class="btn btn-sm bt-button personal-letter">私信
                    </a>
                                </div>
                        </div>
                    
    </div>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值