0572-5.16.1-Hive中decimal类型字段.0结尾数据显示异常问题处理

2019-04-29 16:21:10 浏览数 (1)

作者:辉少

1

问题描述

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

代码语言:javascript复制
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);

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

代码语言:javascript复制
SELECT * FROM decimaltest;

2

问题分析

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

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

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

3

问题解决

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

创建测试表并插入数据

代码语言:javascript复制
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);

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

代码语言:javascript复制
SELECT * FROM decimaltest;

参考:

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

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

0 人点赞