1、問題描述及原因
在使用kettle讀取Excel文件、并導入數據庫時,需要讀取Excel中的數值、日期(或日期+時間、時間)、文本這三種類型的列進來,發現讀取其中的數值時,讀取的數字就不對。
經調查,原因是,在“導出數據為Excel文件”時,Excel的數值格式,只能接受15位的有效數字,否則,其余的替換為0;而“使用Kettle讀取Excel”時,超過17位的數值,讀取時后四位會異常。如下圖所示:
2、解決方法
當我們將數據庫的數值列,導出Excel文件時,應該注意是否超過15位,超過則轉為文本格式,才不會發生失真、丟失信息。
另外,當我們讀取存在上文這樣的超過15位的數值列的Excel文件時,注意先要將整個列轉為文本格式,一般有三種方式,最簡單的是“分列”功能,WPS也支持該功能,如下圖所示(怎樣批量將數值型數字轉換成文本型數字? - 知乎)。
因為Excel中,本身不支持一鍵將超長的數值列,整個轉為文本格式,所以就算調整了格式,也必須逐行點擊一下。
3、日期或時間列的Kettle讀取
類似的,日期、日期+時間、時間列的kettle讀取,也往往會有轉化問題,建議一律按照文本格式來讀取,最后按照文本格式導入數據庫,后續在數據庫中利用相應的函數去轉換格式。