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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Spread Privacy
Spread Privacy
H
Hacker News: Front Page
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
罗磊的独立博客
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
美团技术团队
Help Net Security
Help Net Security
The Hacker News
The Hacker News
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
The Register - Security
The Register - Security
IT之家
IT之家
WordPress大学
WordPress大学
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Help Net Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
NISL@THU
NISL@THU
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
B
Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
S
Security Affairs
小众软件
小众软件
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
A
Arctic Wolf
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence

博客园 - 慕容尘轩

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