hive 脚本测试时候注意 double 和 decimal 的精度差异示例

本文通过示例展示了在Hive中使用decimal和double进行运算时的精度差异,强调了在处理精度要求高的数据时,特别是涉及乘法和除法操作,应避免使用double以防止精度丢失。建议使用decimal类型确保计算准确性。该问题在开发和测试阶段易被忽视,但对理解和优化Hive SQL至关重要。
摘要由CSDN通过智能技术生成

我们先看一下这几个sql在hive中的返回值:

背景:

  在实际hive脚本的测试中,常规的一些sql和mysal类似,那么在测试过程中我们要对使用的每个方法的函数或者引入外部jar
  的一些函数有所了解,解读sql含义的时候也需要更加仔细耐心。对于一些比较复杂的sql来讲,我们只能进行sql的拆解然后
  对每种类型的数据进行场景覆盖,并且对于输入和输出的结果进行比较,但是对于一些隐藏性的问题,我们还是很难覆盖到的
  ,因此举列子说明一下在对于一些金额或者对于精度要求高的情况下,double和decimal 精度差异作为讨论。
  • hive中整数默认给int类型
  • 带有小数位的给double类型
  • 可以通过cast(num as decimal(n,m)) 指定数字类型
  • int类型是最弱的类型,它和其他两个操作后会被转换
  • double是最强的类型,和其他两个类型操作时会全部转换成dluble类型
  • 使用double运算时可能会导致精度丢失,如对精度要求较高,建议全都换成decimal类型之后再做操作
select  cast('0.00407' as decimal(18,6) )*2500   --10.175
select  cast('0.00407' as decimal(1
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值