kettle处理大数据量表-分页抽取数据

概述:

总job,分三步,第一:先清空目标表;

第二,根据源表总的数据行,结合服务器配置 kettle每次能抽取插入多少行,算出需要分n次抽取,并生成1到n的序列值列表。
          ps:生成1、2、3...n 的数据列,然后把每个值赋值给变量var_page,   根据var_page的值分页查询。

第三,根据第二步 生成的1、2、3...n的数据列,为每行都执行一次表插入,即实现分n次抽取数据插入。 

            在每次的执行中都根据变量,select 出对应的数据,进行表插入
               eg: select  *

                     from  table

                     where rownum > (${var_page}-1) * 2000

                     and  rownum <  ${var_page} * 2000

 

 

 

 

详细步骤:

1.清空表

省略

2.根据源表总的数据行,结合服务器配置 kettle每次能抽取插入多少行,算出需要分n次抽取,并生成1到n的序列值列表

eg:总行数 2W

   服务器kettle每次只能抽取 2k行

   需要抽取10次

   序列值列表 1 2 3 4 5 6...10

2.0总览:

2.1计算出要执行多少次

 

SELECT ceiling(count(1)/2000) as p_max_page
FROM src 

PS:四舍五入 向上取值

2.2选中字段,选中该执行频次字段

 

2.3生成序列

随便找个表,利用rownum 生成序列

 

SELECT rownum as p_page
from dwd_chaye_dakehuqudao
where rownum <= ?

 

PS:勾选替换变量,选择“从步骤插入数据” :

2.4 选中序列字段

PS: 这里 “”格式“” 这列要设置为   # , 不然会出现如下报错: 变量会增加小数位

PS:要改成integer  类型的,不然会变成 1.0   2.0  3.0 .....

2.5 复制记录到结果

为了给以后步骤可用

 

3.loop  循环执行 插入数据

PS;勾选执行每行输入行

3.1loop组件总览

 

3.2 set var 设置变量 

从第二步中获取序列值,复制给变量

 

3.2.1 从结果获取记录

3.2.2 赋值变量

 

PS: 变量活动类型:  在父job中存活

 

3.3 table input

根据变量查询出  分页数据,插到目标表中

3.3.1总览:

 

3.3.2 表输入

 

SELECT * 
FROM src 
UNPIVOT(
    data FOR index1 IN (签约金额,签约套数,签约面积)
) s
where 1=1
and rn > (${var_page}-1) *2000
and rn <= ${var_page} *2000

 

 

PS: 勾选 替换SQL中变量

 

3.3.3 获取当前时间 (为目标表中 更新日期字段准备,不需要可省略)

 

3.3.4 表输入

正常选择对应表字段 对应即可

 

以上完结。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值