FAQ-Parquet格式表查询字段结果为null

问题描述/异常栈

Parquet格式表查询字段结果为null

解决方案

 set spark.sql.hive.convertMetastoreParquet=false

问题原因

1parquet格式文件本身自带meta信息,当通过hive进行读取数据时,hive将使用表的meta信息到parquetmeta信息中进行遍历查找,当hivemeta信息发生变更后,将表meta与文件meta信息不一致,遍历查询失败,所以返回结果为null  
2parquet格式表插入数据与表定义字段类型不一致,查询时返回结果为null
3、当向Hive metastore中读写Parquet表时,Spark SQL将使用Spark SQL自带的Parquet SerDeSerDeSerialize/Deserilize的简称,目的是用于序列化和反序列化),而不是用HiveSerDeSpark SQL自带的SerDe拥有更好的性能。这个优化的配置参数为spark.sql.hive.convertMetastoreParquet,默认值为开启。

作者:林帅