kettle处理大数据量表-分页抽取数据
概述:总job,分三步,第一:先清空目标表;第二,根据源表总的数据行,结合服务器配置 kettle每次能抽取插入多少行,算出需要分n次抽取,并生成1到n的序列值列表。ps:生成1、2、3...n 的数据列,然后把每个值赋值给变量var_page, 根据var_page的值分页查询。第三,根据第二步 生成的1、2、3...n的数据列,为每行都执行一次表插入,即实现分n次抽取数据插入。在每次的执行中都
概述:
总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 表输入
正常选择对应表字段 对应即可
以上完结。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)