引言

在上一篇文章中,我们主要讲解的是:kafka的相关的那些事、命令行操作kafka、API操作kafka、kettle中的kafka的相关组件设置及实战演示。

在前面我们用了大量的文章,讲解kettle的基础组件,日常的应用也就够了。后续我通过实战案例还会扩展讲一些组件,比如:java组件、javascript组件等等,还有好多组件没有讲解!!!

在本篇文章中,介绍的是:我工作中遇到的一个实际案例,数据源是一份Excel文件,在使用kettle抽取excel到sql server数据库后,发现数据的精度有问题。下面我们进入今天的主题,展开来说一说吧。

原始数据文件

a、打开文件

kettle庖丁解牛第30篇之excel数据精度_excel

kettle庖丁解牛第30篇之excel数据精度_excel_02

b、调整单元格格式

kettle庖丁解牛第30篇之excel数据精度_kettle_03

实战演示-上篇

转换整体实现的其实并不复杂,只用到了2个组件:Excel输入、表输出。但是组件内部的设置,还是要注意看的,兄弟们。

a、整体实现

kettle庖丁解牛第30篇之excel数据精度_kettle_04

b、Excel输入设置

文件标签

kettle庖丁解牛第30篇之excel数据精度_java_05

工作表标签

kettle庖丁解牛第30篇之excel数据精度_sql_06

内容标签

kettle庖丁解牛第30篇之excel数据精度_sql_07

错误处理标签

kettle庖丁解牛第30篇之excel数据精度_sql_08

字段标签

kettle庖丁解牛第30篇之excel数据精度_精度_09

c、预览Excel数据

kettle庖丁解牛第30篇之excel数据精度_kettle_10

通过kettle预览数据,发现kettle读入的数据和excel显示的不一样,精度减少了

d、修改Excel输入设置

字段标签

kettle庖丁解牛第30篇之excel数据精度_sql_11

e、预览Excel数据

kettle庖丁解牛第30篇之excel数据精度_sql_12

通过kettle预览数据,发现kettle读入的数据和excel显示的不一样,精度变多了。

其实排查到这,我就开始怀疑Excel的显示问题,因为上面提到了它做了单元格式控制:货币。其实,底层保存的真实值就是这个精度多的。谁叫咱会开发呢,下面我们通过java程序验证。

java环境准备

要想编写Java程序,首先我们要创建Java的maven项目。现在主流的java开发工具有:eclipse和IntelliJ IDEA,下面我们就分别演示:如何在这2种开发工具中创建maven项目。

a、eclipse创建maven项目

1、双击eclipse工具

kettle庖丁解牛第30篇之excel数据精度_sql_13

kettle庖丁解牛第30篇之excel数据精度_sql_14

2、创建普通maven项目

kettle庖丁解牛第30篇之excel数据精度_kettle_15

kettle庖丁解牛第30篇之excel数据精度_excel_16

勾选Create a simple project表示创建一个纯净的Maven项目,跳过选择模板

kettle庖丁解牛第30篇之excel数据精度_sql_17

kettle庖丁解牛第30篇之excel数据精度_精度_18

kettle庖丁解牛第30篇之excel数据精度_sql_19

3、创建java文件

使用鼠标 右键操作--->src/main/java目录--->New--->Class

kettle庖丁解牛第30篇之excel数据精度_excel_20

kettle庖丁解牛第30篇之excel数据精度_java_21

4、编辑java程序

kettle庖丁解牛第30篇之excel数据精度_sql_22

5、运行java程序

kettle庖丁解牛第30篇之excel数据精度_excel_23

走到这一步,恭喜恭喜,你已经eclipse中成功的拥有了自己的第1套简单maven项目。

b、idea创建maven项目

1、双击IntelliJ IDEA工具

kettle庖丁解牛第30篇之excel数据精度_sql_24

kettle庖丁解牛第30篇之excel数据精度_java_25

2、创建一个新项目

kettle庖丁解牛第30篇之excel数据精度_sql_26

不需要勾任何东西,直接点击Nex

kettle庖丁解牛第30篇之excel数据精度_java_27

kettle庖丁解牛第30篇之excel数据精度_kettle_28

3、创建java文件

kettle庖丁解牛第30篇之excel数据精度_excel_29

kettle庖丁解牛第30篇之excel数据精度_excel_30

4、编辑java程序

kettle庖丁解牛第30篇之excel数据精度_java_31

5、运行java程序

kettle庖丁解牛第30篇之excel数据精度_kettle_32

通过java读取Excel原始数据

其实kettle底层就是使用java开发的,kettle中的Excel输入组件就是使用poi类的api。因为kettle的安装目录中,有一个lib子目录,它里面放的全是底层的jar包,如下图所示。

kettle庖丁解牛第30篇之excel数据精度_kettle_33

a、编辑pom.xml

kettle庖丁解牛第30篇之excel数据精度_java_34

b、查看引入的jar包

kettle庖丁解牛第30篇之excel数据精度_excel_35

c、java实现程序

由于实现代码较多,我只能分批截图,兄弟们注意代码行号。

kettle庖丁解牛第30篇之excel数据精度_sql_36

kettle庖丁解牛第30篇之excel数据精度_kettle_37

kettle庖丁解牛第30篇之excel数据精度_excel_38

d、运行程序

kettle庖丁解牛第30篇之excel数据精度_sql_39

从java的运行结果来看,我们发现kettle中读取的就是原始数据,没有问题。

实战演示-下篇

a、表输出设置

主选项标签

kettle庖丁解牛第30篇之excel数据精度_excel_40

数据库字段标签

kettle庖丁解牛第30篇之excel数据精度_excel_41

b、运行转换

kettle庖丁解牛第30篇之excel数据精度_java_42

kettle庖丁解牛第30篇之excel数据精度_sql_43

kettle庖丁解牛第30篇之excel数据精度_精度_44

kettle庖丁解牛第30篇之excel数据精度_excel_45

验证sql server中的数据

a、数据类型说明

在sql server中创建表,最后这1列的类型设置为decimal,这个类型如果不指定小数位,默认就是取整。如果指定小数位,你保存的实际数据如果小数位不够,保存到表的同时,自动在数值后面补0

b、表中使用的类型

在sql server中创建表,最后这1列的类型设置为float,让它自己去识别数据保存。

kettle庖丁解牛第30篇之excel数据精度_kettle_46

c、打开表查看数据

kettle庖丁解牛第30篇之excel数据精度_kettle_47

我们发现灌入到sql server表中的数据,以科学技术法显示的。其实底层还是正常的数据,下面来验证这个事。

d、把表中的数值粘到excel

G列中是excel原始数据

kettle庖丁解牛第30篇之excel数据精度_精度_48

H列是从表中粘过来的,科学记数法显示的数值

kettle庖丁解牛第30篇之excel数据精度_excel_49

我们能看出来,第20行中G列和H列的数据是一样,验证完毕。

结束语

在本篇文章中,介绍的是:我工作中遇到的一个实际案例,数据源是一份Excel文件,在使用kettle抽取excel到sql server数据库后,发现数据的精度有问题。带领大家一步一步的排查并解决,中间还穿插了java编程。

兄弟们,其实想和作是有一段距离的,你想着想着就没有了,可是你做着做着,它就落地了。

啥都别说了,兄弟们后面跟着我干就完了,我们依然掰开揉碎的方式去说。后续的内容更精彩,敬请期待,感谢兄弟们的关注!!!