kettle基本操作2:使用日期字段分批次同步数据

0.前言

在同步大表的时候,如果数据量大,需要分批次进行同步,使用分页是一种方法,如果原表中是有Date字段的话,可以按日期进行同步。本次kettle同步使用日期搭建同步的工作流,主要的思路如下:

  • 清空目标表
  • [转换]获取日期分组的数据;
  • [转换]分批写数据到目标表;

1.设计步骤

(1)主工作流

主工作流的设计如下:
image

(2)truncate目标表

这个节点只是一个sql的脚本,相对简单,设置如下:
image

(3)[转换]获取分组数据

这是一个转换,转换的节点只有两个,表输入组件只是简单对日期字段last_login_time进行grouy by,并复制结果,如下:
image

  • 表输入
    image
SELECT last_login_time FROM dcs_user group by last_login_time order by last_login_time;
  • 复制记录到结果
    这个设置没什么好介绍的,图都懒得放。

(4)[转换]分批写数据到目标表

这个转换节点必须勾选"执行每一个输入行",意思是,上一个节点会输出多行数据(即每一个日期),此数据将逐行输入"分批写数据到目标表"这个节点,这是实现循环读取数据的关键配置。
image

以下是这个转换的具体设计:
image

  • 从结果获取记录
    设置从上一个结果集获取的数据字段名,及其数据类型:
    image

  • 字段选择
    字段选择主要是根据需要做一些格式设置,如结果集获取的数据格式可能是yyyy/MM/dd,可通过此组件将格式设定为'yyyy-MM-dd',方便传入SQL语句。如果是需要设定格式的,需要在此节点的"元数据"选项中进行设置。
    image

  • 表输入
    从源表按分组依据的last_login_time字段爱批次读取数据。表输入的SQL语句中的参数可以使用变量传递,也可直接使用上一节点的字段(PS:这里使用变量传递我没有实验成功,再议~~),设置如下:
    image

SELECT username,real_name,last_login_time FROM dcs_user WHERE last_login_time = ?;
  • 表输出
    设置如下:
    image
posted @ 2025-09-10 13:47  潇雨锁清秋  阅读(78)  评论(0)    收藏  举报