Hive 以十进制值为空的配置单元表

Hive 以十进制值为空的配置单元表,hive,Hive,我遇到了一个奇怪的问题。我尝试在文件和表定义中使用制表符分隔符,并使用逗号 但在这两种情况下,它都将十进制值读取为NULL。但当我将此字段定义为INT时,它就可以正常工作了 具有逗号分隔值的示例数据: 1,22.334 2,445.322 3999.233 将此表定义为 创建表x(ID INT,SAL DECIMAL(3,3))行格式分隔字段,以“\t”位置“\tmp\data”结尾 对于逗号分隔的文件也是如此 创建表x(ID INT,SAL DECIMAL(3,3))行格式分隔字段,以“,”位

我遇到了一个奇怪的问题。我尝试在文件和表定义中使用制表符分隔符,并使用逗号

但在这两种情况下,它都将十进制值读取为NULL。但当我将此字段定义为INT时,它就可以正常工作了

具有逗号分隔值的示例数据: 1,22.334 2,445.322 3999.233

将此表定义为

创建表x(ID INT,SAL DECIMAL(3,3))行格式分隔字段,以“\t”位置“\tmp\data”结尾

对于逗号分隔的文件也是如此

创建表x(ID INT,SAL DECIMAL(3,3))行格式分隔字段,以“,”位置“\tmp\data”结尾


但在这两种情况下,它都将十进制值读取为NULL?问题是什么?首先,十进制数据类型不接受数据中的逗号。 第二个问题是,对于提供的示例数据,必须将小数点(3,3)增加到最小小数点(7,3)。 因为十进制(3,3)不能保存3个值中的任何一个

由于原始数据中包含逗号, 您必须将所有列作为字符串数据类型加载到表中。
稍后使用正则表达式删除数据中的逗号,并将其加载到具有十进制数据类型的二级配置单元表中。

为什么在下面的示例中,22.342和2之间有空格?1,22.334 2只需将这些格式化值映射为
字符串
,然后使用SQL删除糟糕的千个分隔符,并转换为目标数字类型,例如
十进制(15,3)
@Espanta实际上它不是空格……在发布此数据时,在同一行上使用了不同的记录。这就像rec1=1,22.334 rec2=2445.322 rec3=3999.233。所有这些记录都是新的lines@Samson是的,这是另一种方法。但为什么这种方法会失败?我很好奇为什么hive不能解析这些十进制值,制表符分隔或逗号。感谢您的回答。我也尝试了制表符分隔格式的相同数据。但问题相同。我的示例数据在小数点后最多有3位数字。因此,我想它应该可以工作,而且无论如何,即使它更大,它也会被舍入或截断?小数点意味着固定的比例/精度,精确的计算。你想让你的银行截断你的储蓄账户吗?!?是的,你是对的。当我提高精度时,它被正确地解析了。但是我想知道,尽管我的数据是22.444,为什么它需要十进制(6,3)的精度?当我把精度降低到4,3时,它又是NULL@Gourav十进制(6,3)是指,它可以容纳总共6位数字,经精确后最多可容纳其中3位。当您使用十进制(4,3)时,这意味着数字中的最大总位数不应超过4,且精度后的最大位数仅应为4中的3。22.444总共有5位数字,在这5位数字中有3位在精度之后。因此,此操作所需的最小数据类型为十进制(5,3)