Kettle采集数据时遇到error:invalid byte sequence for encoding "UTF8": 0x00

我们项目有个需求是需要通过 Kettle把数据从 oracle采集到postgresql,然后在采集过程中发现出现了invalid byte sequence for encoding "UTF8": 0x00导致采集失败,经查阅相关资料,pg官网上解释是因为pg数据库不能存储\u0000这样的字符,明白了根本原因,解决方案就容易多了,首先是确定哪此字段会包含这种字符,为了快速定位问题,我把kettle日志设置级别为RowLevel,这样的日志非常多,每一行的数据都打印出来了,很快我们找到了出问题的那一行数据,之后写了一个java 小程序把这行数据取出来,然后逐个字段进行判断,居然发现至少有3个字段存在这种字符,而且主键也出现了。于是想了个办法,就是通过配置文件设置哪些表哪些字段需要替换\u0000为空值,然后在insertUpdate组件中获取设置,并在processRow中进行替换,搞定!

你可能感兴趣的:(大数据)