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

kettle从入门到精通 第116课 ETL之kettle,线上排雷,踩坑复盘

场景:周五的时候一个小伙伴加我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

 

http://www.jsqmd.com/news/314378/

相关文章:

  • 小程序毕设项目:基于springboot的文物知识科普“江西文物时讯”微信小程序(源码+文档,讲解、调试运行,定制等)
  • 基于SpringBoot的线上教育培训办公系统毕业设计源码
  • 基于SpringBoot的视频点播系统毕业设计源码
  • 基于SpringBoot的高校线上心理咨询室毕业设计
  • 基于plc的四层电梯自动控制系统设计SIEMENS/西门子(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 宏病毒组做完了,如何开展有效验证?
  • 基于S7-200 PLC和组态王组态双容水箱液位控制系(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • AI应用架构师的经典范例:价值投资多智能体系统精准分析的借鉴意义
  • AI可解释性在原生应用中的重要性:从理论到实践
  • django-flask基于大数据的学习视频资源推送系统的设计与实现vue
  • django-flask基于数据可视化的智慧社区小区住户居民出入登记系统平台vue
  • django-flask智能水果连锁店商城销售系统设计vue
  • 工业数据智能怎样帮助企业打破数据孤岛?
  • 用WebNN API让浏览器跑AI模型又快又省电
  • std::mutex与std::lock
  • 线程函数中抛出的未捕获异常
  • 为什么35岁前没学AI,你仍有机会翻身?
  • 别再只写脚本了!测试工程师如何成为技术决策者
  • 震惊!这些免费工具能让开发效率提升200%:软件测试从业者的专业指南
  • ‌为什么AI安全测试成2026年刚需?——给软件测试从业者的专业深度解析
  • .net AI开发05 第九章 新增 RAG 文档处理后台服务 RagWorker 及核心流程
  • 量子计算+AI融合:开发者必须跟上的新浪潮
  • 【大模型训练】deepseek MTPpp阶段的输入内容哪里来
  • 地理信息科学(GIS)专业就业真相
  • 开发者创作必备工具清单:技术博客 / 教程 /内容全流程工具汇总
  • 面试官:既然 JWT 这么好,为什么大厂还在用 Session?
  • TCON板硬件调试小记
  • 一上午就面了4个前端岗,基本都给了二次机会
  • [特殊字符]JS 为什么能跑这么快?一文把 V8 “翻译官 + 加速器” 机制讲透(AST / 字节码 / JIT / 去优化)
  • 公司新来的前端虽然水,但比很多人明智