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
,否则得到将不是预期的结果,而是异常的抛出。