Kettle 表输入表输出提升10倍的技巧

oracle 写法:
select * from (
select test.*,rownum rn from test ) 
where mod(rn,${Internal.Step.Unique.Count})= ${Internal.Step.Unique.Number} 
pg 写法:
select * from (
select row_number() over() as rownum,* from customer  ) a
where mod(rownum,${Internal.Step.Unique.Count})= ${Internal.Step.Unique.Number} 



 表输入和表输出开启多线程
 表输入如果开启多线程的话,会导致数据重复。比如 :
 select * from test ,起3个线程,就会查3遍,最后的数据就是3份。肯定不行,没达到优化的目的。 
 因为source是oracle,利用oracle的特性: rownum 和函数: mod ,以及kettle的参数: Internal.Step.Unique.Count,Internal.Step.Unique.Number
 rownum 是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,意味着,如果排序字段或者数据有变化的话,rownum也会变(也就是跟物理数据没有对应关系,如果要对应关系的话,应该用rowid,但是rowid不是数字,而是类似 AAAR3sAAEAAAACXAAA    的编码),所以需要对rownum进行固化,所以将 
 SELECT test.*,rownum rn FROM test 作为子查询
 mod 是oracle的取模运算函数,比如, mod(5,3)  意即 5%3=2 ,就是 5/3=1...2 中的2,也就是如果能获取到总线程数,以及当前线程数,取模,就可以对结果集进行拆分了。 mod(行号,总线程数)=当前线程序号
 kettle 内置函数 ${Internal.Step.Unique.Count}${Internal.Step.Unique.Number} 分别代表线程总数和当前线程序号
 而表输出就无所谓了,开多少线程,kettle都会求总数然后平摊的。
 右键选择表输入或者表输出,选择 改变开始复制的数量... 注意,不是一味的调大就一定能提升效率,要进行测试的。 
 表输入时,注意勾选替换变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值