kettle庖丁解牛第30篇之excel数据精度
  Lb78AVwchy8f 2023年11月02日 47 0

引言

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

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

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

原始数据文件

a、打开文件

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

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

b、调整单元格格式

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

实战演示-上篇

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

a、整体实现

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

b、Excel输入设置

文件标签

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

工作表标签

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

内容标签

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

错误处理标签

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

字段标签

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

c、预览Excel数据

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

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

d、修改Excel输入设置

字段标签

kettle庖丁解牛第30篇之excel数据精度_java_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数据精度_kettle_14

2、创建普通maven项目

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

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

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

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

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

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

3、创建java文件

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

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

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

4、编辑java程序

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

5、运行java程序

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

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

b、idea创建maven项目

1、双击IntelliJ IDEA工具

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

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

2、创建一个新项目

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

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

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

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

3、创建java文件

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

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

4、编辑java程序

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

5、运行java程序

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

通过java读取Excel原始数据

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

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

a、编辑pom.xml

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

b、查看引入的jar包

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

c、java实现程序

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

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

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

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

d、运行程序

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

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

实战演示-下篇

a、表输出设置

主选项标签

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

数据库字段标签

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

b、运行转换

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

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

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

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

验证sql server中的数据

a、数据类型说明

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

b、表中使用的类型

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

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

c、打开表查看数据

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

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

d、把表中的数值粘到excel

G列中是excel原始数据

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

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

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

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

结束语

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

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

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  3I1N9ysrcSyk   2023年12月08日   31   0   0 javahapi数据交换
  X5zJxoD00Cah   2023年12月11日   30   0   0 表名SQL
  DF5J4hb0hcmT   2023年12月07日   50   0   0 javaArthas
  DF5J4hb0hcmT   2023年12月08日   30   0   0 慢查询druidSQL
Lb78AVwchy8f