SparkSql中,关于Hive表与Parquet文件的Schema转化兼容

本文对比了Hive和Parquet在表Schema处理上的关键差异,包括大小写敏感性和空值处理的不同。详细解释了如何在转换过程中保持结构一致,解决元数据刷新问题。

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

从表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")

 

转载于:https://www.cnblogs.com/SysoCjs/p/11466221.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值