概述:

总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 表输入

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

 

以上完结。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐