当前位置: 首页 > news >正文

kettle基本操作4:使用日期字段增量数据同步

0.前言

两个数据库表之间使用日期(Date或timestamp)字段进行增量同步,是ETL操作的基本操作(本文举例的源表数据只新增不删除不修改的情况),最简单的步骤如下:

  • 获取目标表时间戳字段的max值;
  • 获取源表时间戳字段的max值;
  • 比较确认源表的时间要大于目标表,否则同步没有意义;
  • 根据目标表的时间戳字段获取源表的数据并写入至目标表;

1.主作业

主作业工作流如下图所示,这里使用变量的方式进行日期字段的传递。
image

以下逐个组件进行说明:

1.1 设置变量

这里将源表、目标表的最大时间戳字段先申明为变量:TARGET_MAX_DATE、SOURCE_MAX_DATE,注意变量的有效范围。
image

1.2 获取目标表的最大日期

  • 这个转换只有两个组件,从“表输入”组件获取目标表的最大时间戳,但这里要注意日期格式的转换。
    image

  • 表输入的SQL语句如下,我目标表是MySQL:

SELECT DATE_FORMAT(max(RUN_DATE), '%Y-%m-%d %H:%i:%s.%f') as target_max_month
FROM sasrep.rp_xxx
  • “设置变量”组件的配置比较简单,如下图:
    image

1.3 获取源表的最大日期

  • 这个转换的设置与上述“获取源表的最大日期”的转换没有什么大的差别,但我源表是DB2,取数的SQL如下:
SELECT VARCHAR_FORMAT(max(RUN_DATE), 'YYYY-MM-DD HH24:MI:SS.FF6') as source_max_month 
FROM SAS.rp_xxx
  • “设置变量”的组件配置如下图:
    image

1.4 写日志-变量赋值检查

  • 在设置好变量后,这里通过写日志的方式做一个简单的检查,看变量是设置成功,因为我本人因为变量名拼写问题,老是没有设置变量成功,故将写日志作为调试的手段之一,日志的设置如下图所示:
    image

1.5 日期比较

  • 这里使用了javascript脚本来检查目标表的max日期是表比源表max日期要小,这里要注意kettle的js脚本返回结果是布尔类型的,完整javascript代码如下所示:
var target_max_date = parent_job.getVariable("TARGET_MAX_DATE");
var source_max_date = parent_job.getVariable("SOURCE_MAX_DATE");
target_max_date < source_max_date ;

上述返回结果的条件为true则正常数据同步,如果为false则中止同步。

1.6 增量读取原表记录并写目标表

  • 这个转换只有“表输入”、“表输出”两个组件,以下是表输入组件的设置:
    image

  • 以下是表输出组件的设置,建议将批量提交的记录调大一些
    image

1.7 写日志-日期比较结果

如果在“日期比较”节点的结果为false,再通过节点写日志,没这个节点问题也不大。
image

2.总结

以上就是通过日期字段进行增量同步的简单kettle工作流,但实际生产会比较复杂,注意事项如下:

  • 上述只适用源表只新增无删除无更改的情况,且在同步作业时不会新增数据,生产时,最好回写“已读取”的标志;
  • 由于通过日期获取源表数据时,日期的format是固定的,获取max日期时注意转换合适的字符串;
http://www.zskr.cn/news/27404.html

相关文章:

  • 2025 年钛棒厂家最新推荐权威榜单:深度解析国内头部厂家国际市场开拓成绩及产品优势钛螺丝/加工件/医用/合金/异形件钛棒厂家推荐
  • 掌门社交电商系统:赋能本地生活的三方共赢新生态
  • 就餐宝微信小程序:重塑企业食堂管理新生态
  • MySQL的三大日志redolog,binlog,undolog
  • 如何解除百度网盘下载限速
  • 分布式专题——33 一台新机器进行Web页面请求的历程 - 指南
  • 开源隐私计算框架SecretFlow | 基于隐语的金融全链路场景介绍和应用实践
  • 2025 最新智能卫浴镜厂家推荐榜单:家装酒店工装优选,除雾语音多功能品牌权威盘点多功能/语音/蓝牙/led/带灯智能卫浴镜厂家推荐
  • 视频汇聚平台EasyCVR在智慧工地无网线无电线监控现场视频解决方案
  • Spring进阶 - SpringMVC达成原理(二)DispatcherServlet处理请求的过程
  • Python实现基于SAO-Transformer-LSTM雪消融优化算法(SAO)优化Transformer-LSTM组合模型进行多变量回归预测的详细项目实例 - 详解
  • 2025年模内注塑标杆厂家:腾达鑫电子,IML|IMD|IMR|IMP 定制新标准
  • zlog3
  • 2025 文审礼品机源头厂家最新推荐榜:奔奔游乐居首,合规资质 + 实力口碑双保障权威排行
  • Python-配置PyCharm使用正确的Python解释器
  • pytorch第66页
  • 有什么指标可以判断手机是否降频
  • 实用指南:Linux内核kallsyms符号压缩与解压机制
  • 从埋点到用户行为分析:ClkLog 如何帮助企业读懂用户
  • 深入解析:领码方案 | 掌控研发管理成熟度:从理论透视到AI驱动的实战进阶
  • 函数的高级
  • C#实现OPC客户端
  • 卷积神经网络的读后感
  • Calibre 8.11技术拆解:AI集成与二次开发的实战指南 - 教程
  • 5G企业应用的七大场景与商业机遇
  • 类的多态(Num020) - 实践
  • 数据类型,二元运算符,自动类型提升规则,关系运算,取余模运算
  • WPF使用MediaCapture开发相机应用(四、相机录视频)
  • 2025年10月中国婚姻家事与财富管理律师评价榜:五强评测
  • Timing Signoff 技术精要