-
一、场景描述
- 数据同步过程中,部分数据量太大,直接执行 插入/更新 组件,很容易内存溢出,执行任务失败
- 此类数据变动不大,属于时序数据,不可编辑或删除, 比如日志数据、物联网数据
-
二、解决思路
- 既然是时序数据,那么我们只需要找出上次同步的终点或本地同步的起点就可以只同步变动的数据
- 我的想法是,查询目标库中总行数或者最大主键标识,然后 查找 原始数据中 大于 总行数或最大主键标识的数据即可。
-
三、kettle具体实现
- 1、设置环境变量
-
表输入
-
设置变量
-
- 1、设置环境变量
-
2、获取变量,设置表输入和输出
-
获取变量
-
表输入
-
表输出
-
-
3、建立 转换 任务job
-
四、注意事项
- 1.重点是变量名什么时候加$。
- 2.要点击勾选“替换SQL语句里的变量”;
- 3.如果采用时间作为筛选条件,最好将日期转为时间戳,否则会报 ‘字符串转换日期错误’
// mysql SELECT UNIX_TIMESTAMP(max(printTime)) as printTime FROM f_table // sqlserver select DATEDIFF(second, '1970-01-01 08:00:00', printTime)
kettle设置环境变量和获取变量(单值)
最新推荐文章于 2024-07-31 11:18:40 发布
针对数据同步时内存溢出问题,本文提出利用时序数据的特性来优化。通过获取目标库的最大主键或最新时间戳,仅同步更新的数据。在Kettle中设置环境变量,通过表输入和输出实现增量同步,并注意SQL语句中的变量替换和日期转换。确保日期转换为时间戳以避免格式错误。
摘要由CSDN通过智能技术生成