【Kettle实战】数据分批处理及参数化传递子作业任务

对于大表操作,本来离线数据需要分批处理,刚开始只会用具体日期去做,通过复制多分转换和作业来处理。当日期范围大了后,这是个苦力活儿,kettle里面有参数化传递功能,多动手实操,懂得灵活变通自然工作也就轻松很多。

Mysql取行号

SELECT @row_number:=@row_number+1 AS num FROM tmp, (SELECT @row_number:=0) AS t

【Kettle实战】数据分批处理及参数化传递子作业任务_第1张图片

MySQL日期参数处理

【Kettle实战】数据分批处理及参数化传递子作业任务_第2张图片

select * from (
select num,DATE_FORMAT(DATE_SUB(NOW(),INTERVAL num-1 month), '%Y-%m-1 00:00:00') dt
,DATE_FORMAT(DATE_SUB(NOW(),INTERVAL num-1 month), '%Y-%m-1 00:00:00') startDate
,DATE_FORMAT(DATE_SUB(NOW(),INTERVAL (num-2) month), '%Y-%m-1 00:00:00') endDate
from(
SELECT @row_number:=@row_number+1 AS num FROM tmp, (SELECT @row_number:=0) AS t
)A limit 20
)B where startDate>='2021-01-01'

主job

【Kettle实战】数据分批处理及参数化传递子作业任务_第3张图片

重点注意配置:子job每行都需要执行

【Kettle实战】数据分批处理及参数化传递子作业任务_第4张图片

第一个转换,配置参数

重点步骤:复制记录到结果

【Kettle实战】数据分批处理及参数化传递子作业任务_第5张图片

子job,单个批处理作业任务

里面包含一个转换逻辑,这个转换步骤是需要配置具体“转换”处理逻辑的。

【Kettle实战】数据分批处理及参数化传递子作业任务_第6张图片

批处理任务转换,从结果获取参数,设置变量

重要步骤:

从结果获取记录

从主job中获取记录,一次一行

设置变量

将记录结果参数配置成变量

【Kettle实战】数据分批处理及参数化传递子作业任务_第7张图片

表输入

注意要勾选替换SQL变量;变量用单引号和doolar符和大括号

【Kettle实战】数据分批处理及参数化传递子作业任务_第8张图片

你可能感兴趣的:(数据仓库,软件研发,java,etl)