从表Schema处理角度对比Hive和Parquet,两者主要的区别:
- Hive区分大小写,Parquet不区分大小写;
- Hive允许所有的列为空,而Parquet不允许所有列为空;
基于上述两点区别,在进行Hive metastore Parquet转换为SpqrkSql Parquet时,需要将两者的结构进行一致化,其一致化规则:
- 两者同名字段必须具有相同的数据类型,一致化后的字段必须为Parquet的字段类型,这个规则解决了空值得问题;
- 一致化后得schema,只包含Hive metastore中出现的字段,忽略只出现在Parquet的字段;
- 只在Hive metastore出现的字段设置为nullable,并加到一致化后的schema中。
关于元数据,还要注意一点——元数据的刷新。SparkSQL缓存了Parquet元数据以达到良好的性能。当Hive metaStore Parquet表转换为enabled时,表修改后,缓存的元数据并不能刷新,这时必须要手动刷新元数据。
//手动刷新元数据
sparkSession.catalog.refreshTable("table_name")

本文对比了Hive和Parquet在表Schema处理上的关键差异,包括大小写敏感性和空值处理的不同。详细解释了如何在Hive Metastore和SparkSQL Parquet之间进行Schema一致化,以及在转换过程中解决空值问题的方法。同时,文章还提到了元数据刷新的重要性。

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



