Hive数据表的存储支持多种方式,纯文本和Parque其中的两种。
纯文本的优势在于简单,可读,缺点在于无压缩,效率;Parque的优势在于计算高效,可压缩的列存储模式,缺点在于比纯文本多了一层定义带来的复杂性。
Hive数据表的字段修改,可以通过
alter table name change column column_name new_column_name type;
进行重命名和(或)类型修改。
文本文件由于其天然的简单性,数据中不含有类型信息,完全为数据本身,类型信息完全由Hive进行维护,所以许多类型转换操作在以纯文本存储的表中是可以按预期完成的。
比如如下两个类型转换
string->int
double->int
在文本表中都是可以实现的,即便是string类型的数据实际上备份数值,也最多是后续查询出来的数据为null。
上述“符合预期”的结果在Parquet存储的数据表中却是无法完成的。
同样的类型转化,Hive层面是可以完成操作的,但是后续查询数据的时候,除非发生转换类型的列所有数据都是null,否则得到将不是预期的结果,而是异常的抛出。
java.io.IOException

本文探讨了Hive数据表在使用Parquet存储时,字段类型修改所带来的影响。相较于纯文本,Parquet虽有计算高效和压缩等优势,但类型修改可能导致查询异常。在Parquet表中,Hive的类型转换不会改变数据文件中的实际类型,从而在查询时引发错误。解决方法是将Hive表类型恢复到原始类型,以避免数据损坏。

6910

被折叠的 条评论
为什么被折叠?



