sqoop导出的数据到sqlserver数据精度确实问题解决方案

业务场景:

1.使用spark建立数据pipeline,保存数据有float,业务需要4为小数,类型为float

问题描述:

hive表中数据类型为float

1.hive表中float类型数据在spark中计算中精度缺失;

2.通过sqoop导出数据到sqlserver,hive中显示4为小数或科学记数法,sqlserver中显示科学记数法或者15为小数(使用hive on Spark 显示时有相同问题)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

此处省略一万字。。。。。。

解决方案

1. 使用spark或hive处理完hive中处理完数据后,将保留小数后的数值转换为string类型(推荐),sqlserver中正常使用float类型

2. 使用hive处理完数据保存为decimal(m,n)类型

注意: 使用spark处理数据转为deciaml, 在spark2.3.2中需要设置(解决精度确实问题)

spark.sql.decimalOperations.allowPrecisionLoss false  (default:true)

3. sqlserver中float数据类型改为decimal(m,n)

4.hive或者spark中处理完数据后不用管,正常保留4为小数,sqlserver中数据用竞速确实或者科学记数法显示,让业务自己处理(如果业务坚持在hive表中使用Float类型)

尝试方法:

1.hive中使用Double: 无法解决hive on spark中像是15为小数问题,且sqlserver总小数为15位。

2.hive中使用decimal:需要提前定义decimal字段,即手动建表:无法满足自动建表的要求,且hive中类型非float,既然和业务要求不一致,不如使用string。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值