ETL过程中数据精度不准确问题
最近一位同学在使用Restcloud ETL产品做数据集成,出现数据传输到目标库表后,数据精度不准确问题。
场景为:从oracle源表数据 格式为:number(21,6)将数据同步到mysql目标表数据格式为:float(21,6) ; 同步数据 发现 oracle是:538121.47 同步到mysql数据库中:538121.50,看到这里,不免有些同学会认为是产品的问题,我们一起来分析下。
首先,我们需要了解下数据在计算机中的区别。在计算机内部,小数有两种表示方法: 定点数和浮点数。
1、浮点型(float和double) 浮点型在数据库中存放的是近似值
MySQL数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d⼩数位
double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d⼩数位
设⼀个字段定义为float(5,3),如果插⼊⼀个数123.45678,实际数据库⾥存的是123.457,但总个数还以实际为准,即6位。
2、定点数 定点类型在数据库中存放的是精确值
浮点型在数据库中存放的是近似值,⽽定点类型在数据库中存放的是精确。decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是⼩数位。
对于单精度浮点数Float: 当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成double或者decimal,两者的差别是double是浮点计算,decimal是定点计算,会得到更精确的数据。
下面使用分析,
首先创建测试表
CREATE TABLE customer ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(45) DEFAULT NULL, age int(11) DEFAULT NULL, jinqian float(5,2) DEFAULT NULL, PRIMARY KEY (id) );
float(m,d)
m表示的是最大长度,d表示的显示的小数位数。
例如上面的sql里:float(5,2) 表示:这个浮点数最大长度为5,也就是五位,然后小数部分为2位,至于存储范围,取决于你是否定义了无符号。
无符号的话,最小是0.0 最大能存储到99999.9,如果有符号的话,范围是:-99999.9至99999.9。
默认大小为24位数字,精度大约7位数字(经测试为6位),当设置M大小大于24时,自动转换为DOUBLE类型;同时设置M和D时不进行自动转换。
小数位超过设定值,按四舍五入保存
INSERTINTO customer (id,name,age,jinqian)VALUES(111111111,'uu',15,90.012);
INSERTINTOcustomer(id,name,age,jinqian)VALUES(1111111111,'uu',15,90.018);
上面两个分别被保存为
总结
从上面的分析,我们可以得出以下结论:
1、浮点数存在误差问题;
2、对货币等对精度敏感的数据,应该用定点数表示或存储;
3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
4、要注意浮点数中一些特殊值的处理;![]()
ETL过程中数据精度不准确问题的更多相关文章
- 锚点的animate使用过程中定位不准确的问题小记
源码: $('html, body, .S').animate({ scrollTop: $('.a1').offset().top - 133}, { duration: 1500, easing: ...
- BI实施过程中的工具与服务
成功的BI项目,不仅仅是应用了BI工具软件,还要具备完善的BI服务体系,才能称之为真正成功的商业智能bi项目. 现在的BI(商业智能)比起几年前的ERP一样,成为CIO们关注的焦点.在ERP等基础信息 ...
- 在CMMI推广过程中EPG常犯的错误(转)
本文转自: http://developer.51cto.com/art/200807/86953.htm 仅用于个人收藏,学习.如有转载,请联系原作者. ---------------------- ...
- 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...
- APP store 上架过程中碰到的那些坑&被拒的各种奇葩原因整理&审核指南中文版
苹果官方发布的十大常见被拒原因 1.崩溃次数和Bug数量.苹果要求开发者在将应用提交给App Store之前彻查自己的应用,以尽量避免Bug的存在. 2.链或错误的链接.应用中所有的链接必须是真实且有 ...
- GoEasy实现web实时推送过程中的自动补发功能
熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...
- ETL过程
ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词较常用在数 ...
- 微软BI 之SSIS 系列 - 对于平面文件中 NULL 值处理过程中容易极易混淆的几个细节
开篇介绍 最近有人问我有关文件处理中空值处理的相关问题: OLE DB Destination 中的 Keep Nulls 如何控制 NULL 值的显示? 为什么选中了 Keep Nulls 但是数据 ...
- CDN高级技术专家周哲:深度剖析短视频分发过程中的用户体验优化技术点
深圳云栖大会已经圆满落幕,在3月29日飞天技术汇-弹性计算.网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了<海量短视频极速分发>的主题分享,带领我们从视频内容采集.上传.存储 ...
- Sybase IQ使用过程中注意事项
Sybase IQ使用过程中注意事项 1,字母大小写比对不敏感,也就是在值比对判断时大小写字母都一样; 2,等值,或<>判断,系统默认对等式两边比对值去右边空格再进行比较: 3,GROUP ...
随机推荐
- apache/wampserver配置虚拟主机、多站点端口、允许通过ip访问
虽然经常配置这个,但有时一着急想不起来,这里做个记录 步骤: 监听本网络本主机的端口 (Listen 0.0.0.0:端口号) 添加虚拟主机 VirtualHost 配置目录访问权限(Require ...
- RNN - 梯度消失与爆炸
Last we learned Recurrent Neural Netwoks (RNN) and why they'er great for Language Modeling (LM) 就之前整 ...
- 卷积神经网络 CNN BP算法推导
重点在对CNN的理解后, 理解对卷积层的的 梯度(导数) 推演. 回顾 CNN 首先是对神经网络, 前向, 后向的基本认识. 神经网络初步认识来看, 跟传统的 ML 理论的区别在于, 它更像一个经验的 ...
- RPC实战与核心原理之异常重试
异常重试:在约定时间内可靠的重试 回顾 在 RPC 框架中如何设计自适应的负载均衡,其关键点就是调用端收集服务端每个节点的指标数据,再根据各方面的指标数据进行计算打分,最后根据每个节点的分数,将更多的 ...
- PC端自动化测试实战教程-6-pywinauto 打印和保存控件菜单树结构之ElementNotFoundError(详细教程)
1.简介 其实前边的文章宏哥已经在控制台打印过控件菜单树结构,只是没有将其保存到文件中.只需要一个方法即可.在pywinauto中可以使用 print_control_identifiers() 方法 ...
- String to Integer (atoi)——LeetCode进阶路⑧
原题链接https://leetcode.com/problems/string-to-integer-atoi/ 说实话,看到这道题之前,看这通过率有点慌,到底是因为啥 让一道medium的题目这么 ...
- 一个 Bean 就这样走完了它的一生之 Bean 的出生
生命周期流程 Spring 中的一个 Bean 从被创建到被销毁,需要经历很多个阶段的生命周期,下图是一个 Bean 从创建到销毁的生命周期流程: 在 Bean 的各个生命周期流程点,Spring 都 ...
- 牛客小白月赛76——D
题目链接:D-MoonLight的运算问题_牛客小白月赛76(重现赛) (nowcoder.com) 错误思路:一开始就对 a[i] + x 和 a[i]] * x 讨论,判断 a[i] 的值了,题目 ...
- 202402 湖北武汉 4D3N3P
202402 湖北武汉 4D3N3P D0 / 10 杭州出发 普速列车25T Z47 杭州-武昌 城站22:22开 第3候车室 这趟列车是武汉局"华东三直"中的其中一列,另外两列 ...
- 如何下载DingTalk的直播视频?
如何下载DingTalk的直播视频? 说明:本文未经授权禁止转载 绪言 如果有天早上 你突发奇想 突然就想把老师上课的视频下载下来 但是 正在寻找下载按钮时 突然发现-- 灰色的?!?! 看来是老师禁 ...
