SparkSql中,關於Hive表與Parquet文件的Schema轉化兼容


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM