Kettle导入Excel文件进数据库时,数值发生错误的一种原因
1、问题描述及原因
在使用kettle读取Excel文件、并导入数据库时,需要读取Excel中的数值、日期(或日期+时间、时间)、文本这三种类型的列进来,发现读取其中的数值时,读取的数字就不对。
经调查,原因是,在“导出数据为Excel文件”时,Excel的数值格式,只能接受15位的有效数字,否则,其余的替换为0;而“使用Kettle读取Excel”时,超过17位的数值,读取时后四位会异常。如下图所示:
2、解决方法
当我们将数据库的数值列,导出Excel文件时,应该注意是否超过15位,超过则转为文本格式,才不会发生失真、丢失信息。
另外,当我们读取存在上文这样的超过15位的数值列的Excel文件时,注意先要将整个列转为文本格式,一般有三种方式,最简单的是“分列”功能,WPS也支持该功能,如下图所示(怎样批量将数值型数字转换成文本型数字? - 知乎)。
因为Excel中,本身不支持一键将超长的数值列,整个转为文本格式,所以就算调整了格式,也必须逐行点击一下。
3、日期或时间列的Kettle读取
类似的,日期、日期+时间、时间列的kettle读取,也往往会有转化问题,建议一律按照文本格式来读取,最后按照文本格式导入数据库,后续在数据库中利用相应的函数去转换格式。