Hive中插入数据全为空(sql无误的情况下)

本文探讨了在使用Hive时遇到的一个常见问题——数据类型不匹配。作者分享了一个实例,即在写入数据时,实际类型与表定义类型不符,导致数据虽能成功写入HDFS,但在依据元数据读取时出现解析错误。文章强调了在Hive中这一问题的隐蔽性,并提醒开发者在遇到类似情况时要仔细检查数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(作者:陈玓玏 data-master

如果sql无误的情况下,其实这个问题很好解决。一个很可能的原因就是:
写入的数据类型和建表时定义的数据类型不一致。

我之前碰到这个问题,检查了sql很多遍,上层表的数据也检查了很多遍,都是没有问题的。这个时候,可以选择几条数据,不写入表,直接看结果,发现是有结果的。

再检查建表语句,发现建表语句是:

create table tmp.a
(id int
,name string
,class_one float
,class_two float
,class_three float
) partitioned by 
(type string)
stored as parquet

但写入时,class_one和class_two实际是string类型,定义时写错了,写成了float型,但写入时并未报错,应该是写入只是写入hdfs中,再更新元数据信息,依据元数据信息读取hdfs中的文件时无法解析对应字段,但不会妨碍写入文件系统。如果不是hive,其他数据碰到这个问题可能会报错的,但在hive中就不会,一定要小心这个问题。

如果sql没问题,直接select结果是正确的,那多半就是数据类型问题了。这样粗心的错误可能也只有我自己会犯了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值