db2增加decimal类型字段小数位_05725.16.1Hive中decimal类型字段.0结尾数据显示异常问题处理...

在Hive 1.1.0版本中,遇到以.0结尾的decimal类型数据不显示末尾小数点的问题,此问题在Hive 2.1.1版本已得到修复,会根据设置自动补零。问题源于Apache的HIVE-12063,影响多个Hive版本。解决方案是在不受影响的Hive版本中验证,如CDH 6.1.0的Hive 2.1.1。
摘要由CSDN通过智能技术生成

作者:辉少

1

问题描述

Fayson今天在Hive中插入字段类型为decimal的数据时发现,插入数据为1.0, 1.000等以 .0结尾的数据在hive中显示为1,即不显示末尾的.0 ,如下:

CREATE TABLE decimaltest (d decimal(18,7));
INSERT INTO decimaltest values (1.000000);
INSERT INTO decimaltest values (1.000001);
INSERT INTO decimaltest values (2.000);
INSERT INTO decimaltest values (2.00001);

87478077f8b7c591b78832d0210199c4.png

执行查询语句,结果如下图所示

SELECT * FROM decimaltest;

f71dc0de1f2816abf7cc3af19953932f.png

2

问题分析

上图中我们可以看到以.0结尾的数据在Hive 中都不会显示末尾的.0,而以非.0 结尾的数据则没有该问题。

在apache官网中找到已知的问题记录HIVE-12063,该问题影响版本包括0.14.0、1.0.0、1.2.0、1.1.0、0.13…

5b3d4465d8055f000d7b5f33968bc032.png

而Fayson所用的CDH版本为5.16.1,Hive 版本为1.1.0,在受影响的版本范围内,Hive版本查看如下:

5f8a42b712b4e9bcf4261e152d053bd8.png

3

问题解决

关于在CDH的中Hive的版本,C5的Hive版本为1.1.0,而在CDH 6.1.X 的Hive 版本为2.1.1。并且在Cloudera 的官网C6版本的发行说明中也是有提到关于该问题的处理。于是Fayson便在CDH 6.1.0的版本来验证该问题是否已经解决。

52ba6efc6a35e5426db81c08603a2b36.png

创建测试表并插入数据

CREATE TABLE decimaltest (d decimal(18,7));
INSERT INTO decimaltest values (1.000000);
INSERT INTO decimaltest values (1.000001);
INSERT INTO decimaltest values (2.000);
INSERT INTO decimaltest values (2.00001);

215f975b3445aeb1a3e4592d9abc1fb1.png

执行查询语句,结果如下图所示,发现在Hive2.1.1中不仅修复了末尾的.0 问题,并且根据设置的小数点位数进行自动补零。

SELECT * FROM decimaltest;

98aa83b8760d7286ce84301d2a239883.png

参考:

1、Apache HIVE-12063问题记录地址:

https://issues.apache.org/jira/browse/HIVE-12063

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,那么你可以在这个表插入 DECIMAL(30,14) 类型数据Decimal 类型适用于存储精度比较高的数字,例如货币金额等。当插入数据时,请确保插入的值符合 DECIMAL(30,14) 类型的精度要求,否则会出现精度丢失的情况。同时,也需要注意 DECIMAL 类型的存储空间较大,可能会对表的性能产生影响。 ### 回答2: 你好!根据你提供的信息,你已经在Hive创建了一个包含字段类型decimal(30,14)的表。 decimal(30,14)是一种用于存储大数字和精确小数位数的数据类型。在Hive,通过定义为decimal(30,14)的字段,你可以存储长度为30位的数字,并将小数部分设置为14位。 使用这个字段类型,你可以在Hive存储需要更高精度和更大范围的数值数据。例如,你可以存储货币金额、经纬度坐标或科学计算的精确数值。 值得注意的是,由于decimal(30,14)字段需要更多的存储空间,因此在使用时需要考虑表的性能和存储需求。在创建表时,你可以根据实际需求调整字段类型和精确度,以便最优化地使用存储空间和满足数据精度要求。 总结来说,通过在Hive创建字段类型decimal(30,14)的表,你可以存储更大范围和更高精度的数值数据,并为你的数据分析和计算提供更准确的结果。 ### 回答3: 好的,decimal(30,14) 是一种字段类型,可以在Hive用来存储具有高精度的数字数据。它有两个参数,分别代表了总共的位数和小数点后的位数。 在Hive建立一个字段类型decimal(30,14)的表,可以使用如下的语句: CREATE TABLE 表名 ( 字段DECIMAL(30,14) ); 这个语句将建立一个名为“表名”的表,其包含了一个字段名为“字段名”的列,它的数据类型decimal,总共有30位数字,其14位在小数点后。也就是说,这个字段可以存储高达30位的数字,并且可以保留小数点后14位的精度。 使用这个字段类型,可以存储需要高精度的数字数据,比如金融数据、科学计算数据等。在Hivedecimal类型数据可以进行各种数学运算,并且保留高精度,避免了浮点数的精度丢失问题。 总结来说,decimal(30,14)是一种在Hive可以使用的高精度数字数据类型,适用于需要保留高精度的数值计算和存储需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值