今天遇到一個很奇怪的錯誤,在impala中查詢數據報錯,但是在hive查詢卻能夠返回預期的結果。查閱相關文檔發現是由於修改了hive中的表結構導致,Impala對表的列順序與Parquet文件中列的順序比較敏感,默認情況下需要確保表列的順序與Parquet中列順序一致,如果發生此類錯誤的話,只需要在impala的會話中執行 set PARQUET_FALLBACK_SCHEMA_RESOLUTION=name; 即可,執行完成后我們就能夠在impala中返回自己的預期查詢結果了。
要想從根源上解決這個問題的話,需要刪除修改表結構后之前存儲的歷史數據,可以將外部表轉為內部表后,再truncate內部表,確定數據刪除過后再將內部表轉為外部表。