hive元数据修改未生效

一、问题及分析

我将一个tinyint的字段通过hive客户端修改为smallint类型,并使用spark插入数据。后续通过presto查询数据时候,报错:

java.io.IOException: Malformed ORC file. Can not read SQL type tinyint from ORC stream .origin of type SHORT

说是不能读取tinyint的类型,显然,它没有认出我最新的数据类型,那么基本上认为它拿到的是旧的元数据。思路:

      1.重新建表,重新入数。

      2.让它拿到正确的元数据。

第一个代价太大,并且不是最优的合理思路(经过验证,即便是重新入,也重建分区就行,不用删表建表)。

二、查找方案

经过一些列的百度,最终还是去了官网,发现这么一段文字:

经过尝试,发现了

"MSCK [REPAIR] TABLE table_name"

这个命令。

但是!:我在找到这个方法前,是先删除了分区,重入了该分区的数据解决的,我发现了有的分区能查出结果——修改字段类型之后插入的分区是没问题的,说明识别文件格式的单位可以精细到分区而不是整个数据表。

下次有机会验证一下msck吧,虽然这次没有用到,但是这个命令让我知道了,是可以人为同步元数据的,这很有用!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值