首页 > 其他分享 >kettle庖丁解牛第30篇之excel数据精度

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

时间:2023-05-29 16:03:45浏览次数:48  
标签:庖丁解牛 kettle java 创建 30 Excel 组件 数据

引言

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

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

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

原始数据文件

a、打开文件

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

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

b、调整单元格格式

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

实战演示-上篇

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

a、整体实现

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

b、Excel输入设置

文件标签

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

工作表标签

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

内容标签

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

错误处理标签

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

字段标签

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

c、预览Excel数据

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

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

d、修改Excel输入设置

字段标签

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

e、预览Excel数据

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

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

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

java环境准备

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

a、eclipse创建maven项目

1、双击eclipse工具

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

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

2、创建普通maven项目

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

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

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

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

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

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

3、创建java文件

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

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

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

4、编辑java程序

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

5、运行java程序

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

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

b、idea创建maven项目

1、双击IntelliJ IDEA工具

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

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

2、创建一个新项目

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

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

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

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

3、创建java文件

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

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

4、编辑java程序

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

5、运行java程序

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

通过java读取Excel原始数据

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

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

a、编辑pom.xml

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

b、查看引入的jar包

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

c、java实现程序

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

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

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

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

d、运行程序

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

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

实战演示-下篇

a、表输出设置

主选项标签

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

数据库字段标签

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

b、运行转换

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

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

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

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

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

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

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

结束语

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

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

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

标签:庖丁解牛,kettle,java,创建,30,Excel,组件,数据
From: https://blog.51cto.com/51power/6371713

相关文章

  • CodeForces 1830C Hyperregular Bracket Strings
    洛谷传送门CF传送门每一步思路都非常自然的题。考虑先从一些简单的case入手。1.\(k=0\)设\(g_i\)为长度为\(i\)的合法括号串数。显然\(\foralli\nmid2,g_i=0\)。对于偶数的\(i\),这是一个经典问题,\(g_i\)就是第\(\frac{i}{2}\)项卡特兰数,因此\(g_i=\bi......
  • 1.5万字+30张图盘点索引常见的11个知识点
    大家好,我是三友~~今天来盘点一下关于MySQL索引常见的知识点本来这篇文章我前两个星期就打算写了,提纲都列好了,但是后面我去追《漫长的季节》这部剧去了,这就花了一个周末的时间,再加上后面一些其它的事,导致没来得及写不过不要紧,好饭不怕晚,虽迟但到,走起,开干!对了,本文主要是针对Inn......
  • 银联notifyurl报错302重定向的问题排查,太奇怪了!AspxAutoDetectCookieSupport=1
    用银联的notifyurl接收通知,某一天突然通知没有了,日志里直接没有,就和银联的人一起查,发现错误302重定向。这个notifyurl用浏览器可以正常打开。但是发现打开后会自动追加一段:AspxAutoDetectCookieSupport=1。于是搜,最终发现问题如下图:在会话状态里cookie模式改成了自动检测,导致iis......
  • NVIDIA GeForce RTX 3080 Ti 架构
    服务器环境NVIDIAGeForceRTX3080Ti单张卡有80个SM,每个SM内有128个SP(CUDAcore),故共80X128=10240个CUDAcore显存为12GBGDDR6X,全局内存(显存)带宽为19GbpsAmpere架构......
  • 总结20230528
    代码时间(包括上课)2h代码量(行):50行博客数量(篇):1篇相关事项:1、今天直接凌晨五点才到宿舍,连夜整的无人机,为后天的比赛准备。2、今天上午上的计算机网络,由于比赛冲突,请假了没去上。3、今天下午的web上机也没去,正好赶上web报告也写完。4、晚上也是连夜通宵整的无人机。......
  • ABC 303
    祭奠一次烂掉的ABC。C怎么WA了?F怎么T了?F在kenkoooo上的评分怎么这么高?A点击查看代码#include<bits/stdc++.h>usingnamespacestd;#definede(x)cout<<#x<<"="<<x<<endlusingll=longlong;intmain(){ ios::sync_with_stdio(f......
  • AtCoder Beginner Contest 303 题解 A - E
    A-SimilarString题目大意忽略0和o的差别以及1和l的差别比较两个字符串。解题思路可以硬求,直接写个超长的if判断一下。可以对两个字符串进行修改,0都换成o,1都换成l,然后直接比较两个字符串。ACCode硬求#include<iostream>#include<algorithm>#include<cstring>#i......
  • [20230517]建立索引导致的性能问题2.txt
    [20230517]建立索引导致的性能问题2.txt--//生产系统遭遇建立索引导致的性能问题,建立的sqlprofile里面包含索引名提示,很少见,改索引名导致sqlprofile失效,--//当然我遇到的情况有一点点不同,建立新索引,然后旧索引设置不可见(相当于改名),具体看下面的测试环境模拟.1.环境:SCO......
  • [20230518]建立索引导致的性能问题3.txt
    [20230518]建立索引导致的性能问题3.txt--//生产系统遭遇建立索引导致的性能问题,建立的sqlprofile里面包含索引名提示,很少见,改索引名导致sqlprofile失效,--//当然我遇到的情况有一点点不同,建立新索引,然后旧索引设置不可见(相当于改名),今天测试看看修改sqlprofile的内容是......
  • [20230526]RESULT_CACHE提示选项.txt
    [20230526]RESULT_CACHE提示选项.txt--//一般如果查询信息很少变化,可以通过提示缓存结果,这样可以一定程度减少latch,逻辑读等等资源的使用。--//实际上RESULT_CACHE提示还支持一些选项shelflife,snapshot。--//测试参考链接:http://www.dbi-services.com/index.php/blog/entry/result......