惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
The Cloudflare Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Martin Fowler
Martin Fowler
小众软件
小众软件
量子位
月光博客
月光博客
P
Proofpoint News Feed
IT之家
IT之家
腾讯CDC
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
雷峰网
雷峰网
V
Visual Studio Blog

博客园 - 慕容尘轩

kettle调度系统- XKG-PDI轻松配置对外服务接口 kettle调度系统- XKG-PDI flink cdc kettle调度系统- XKG-PDI添加多数据库支持,mop,达梦,金仓走起 kettle调度系统- XKG-PDI拖拉拽轻松实现DAG,强大到飞起 kettle调度系统- XKG-PDI依赖/依赖链调度使用说明 kettle调度系统- XKG集成Webkettle,kettle脚本在线设计&测试&部署一站式解决方案,全新升级 DataX从入门到精通 第4课 ETL之DataX datax-web单表数据全量+增量同步 DataX从入门到精通 第3课 ETL之DataX datax-web单表数据同步 DataX从入门到精通 第2课 ETL之DataX 安装datax-web DataX从入门到精通 第1课 ETL之DataX 安装DataX kettle插件-excel插件,kettle读取excel动态表头,kettle根据列名读取excel kettle从入门到精通 第119课 ETL之kettle kettle读取excel动态表头,kettle根据列名读取excel kettle从入门到精通 第118课 ETL之kettle,kettle job串行、job并行、 job依赖使用教程 kettle从入门到精通 第117课 ETL之kettle,kettle调用his接口,入参和响应数据均为xml结构 kettle调度系统- XKG集成WebSpoon9.4,kettle脚本在线设计&测试&部署一站式解决方案,持续赋能企业 kettle从入门到精通 第115课 ETL之webspoon 全局异常/错误捕获-续 kettle从入门到精通 第114课 ETL之webspoon 全局异常/错误捕获 kettle从入门到精通 第113课 ETL之webspoon 多行转一行或者多行数据合并为一行 kettle调度系统- 脚本执行错误信息邮件预警,及时发现&解决问题,捍卫生产环境 kettle从入门到精通 第112课 ETL之kettle 数据库资源库,受不了了,逼我出大招 kettle调度系统- kettle数据库资源库,团队协作问题轻松拿捏 kettle调度系统- kettle文件资源库,轻松解决团队协作和脚本版本管理问题 kettle调度系统-1分钟提供接口供外部系统调用,配置简单,快速高效 kettle从入门到精通 第111课 ETL之kettle webspoon7的docker部署详细教程 kettle调度系统-carte集群服务调度,carte集群+算子级集群双集群,涡轮增压,性能拉满,赋能大中型企业 kettle调度系统-carte单体服务调度,支持多kettle版本部署,任务触发毫秒级响应0延迟 kettle从入门到精通 第110课 ETL之kettle webspoon的两种部署方式docker+tomcat使用教程 kettle调度系统-kettle spoon方式调度,强大兼容性,支持各种版本kettle kettle调度系统-kettle嵌入集成方式调度,稳如磐石,一分钟完成任务调度配置 kettle从入门到精通 第109课 ETL之kettle, kettle docker 镜像制作&容器部署
kettle从入门到精通 第116课 ETL之kettle,线上排雷,踩坑复盘
慕容尘轩 · 2026-01-28 · via 博客园 - 慕容尘轩

场景:周五的时候一个小伙伴加我v请教kettle分页问题,当时想的这个问题很简单,直接丢个demo不就完事了嘛,结果搞了3个晚上才搞定,今天来复盘下踩过的坑。

67f1de4d-5acf-4722-b33c-b17b44378b7c

 1、先解决报错问题

首先我处理问题的方式一般是腾讯会议连麦线上排雷。对方的第一个问题是脚本中定义了两个字段,一个是page 默认值是0,另外一个是size默认值是1000。

由于这个job中有多个字转换,通过javascript脚本步骤,复制记录到结果,从结果复制记录等步骤传递参数。多个步骤中page和size的数据类型不一致,导致脚本报错。

解决方案:将page和size的类型设置为统一,这里统一设置为了String ,解决了脚本报错的问题。

2、api接口惹的祸

对方的脚步文件中使用rest组件请求接口获取数据,然后使用json input进行解析。接口的入参是{"page":"0","size":"1000"}

当你看到这个参数之后,是不是第一眼就认为page就是页码,比如0,1,2,3......,但是经过调试发现一直有重复数据,而且对方的同事很坚定的说接口没问题而且一直在用。

直到我看到他和同事的聊天记录后发现了问题所在,对方发给他的参数是:{"page":"0","size":"1000"},{"page":"1000","size":"1000"},{"page":"2000","size":"1000"}

估计细心的人已经发现这里的page参数不是页面,是偏移量offset。类似于mysql中的limit m,n 也就是说从m条记录开始取数据,取n条。

知道了问题所在,马上调整脚本。以为问题终于解决了,洗洗睡觉。然而。。。

3、问题依然存在

脚本调整之后,任务全量跑了一次,结果业务反馈数据缺失且有重复数据问题。我的第一反应就是接口问题,但是对方坚持成接口没问题。没办法,开始调试分析脚本。

经过各种调试,打日志,Alert跟踪,最终一个逗号引起了我的重视,也就是这个逗号引起了接口取数异常。在调试的过程中发现使用javascript代码构造的参数为{"page":"1,000","size":"1,000"}而不是{"page":"1000","size":"1000"},凡事数字大于1000之后都有加逗号进行格式化。后来由于时间比较紧急,简单粗暴方案解决使用replace方法将逗号替换为空字符串解决此问题。

神奇的是即使带着逗号请求接口依然可以获取到数据,真是醉了。。。,这接口容错能力也太强了吧。。。

去掉了逗号,接口数据终于可以正常获取了。

4、持续寻找真凶

虽然用replace方法解决了逗号的问题,但是总感觉没找到真正的问题。由于对方使用的是kettle 7.1版本,我本地也搞了7.1版本来测试。使用javascript步骤声明变量,又一切正常不含有逗号。

376db608-6bb3-4f96-a047-d5f7bf102209

后来想起来了一个函数,也就是这个函数引入了逗号。这个函数就是javascript步骤中的num2str

a2c86398-b5d9-4a6f-bb62-be2c8cf70bf2

 然后查了下kettle的说明文档,将函数num2str多传递一个参数0即可。

6c0e28de-a00b-47db-9c21-a7ab3fc39b03

 至此问题彻底解决。

19a16590-444a-4e76-b15c-1cb38543079e

image