hive上報ERROR:10004錯誤和order by ,sort by區別

在使用hive寫hql時報10004錯誤,提示列字段名稱錯誤。這是一個很常見的錯誤。下面分析下這個錯誤的原因。

例如:select name,count(1) from student group by name order by id;

上面的語句在運行時就會報錯,爲什麼呢?因爲order by 在hive中是全局排序,也即是前面的執行完之後再起一個job對結果集進行全局排序。但上個job執行完以後列名變成了 name和 count(1)根本就沒有id這個列名,所以會報10004錯誤,提示你列名不匹配。

例如:select id from (select id as i from student ) order by id;

上面的語句也會報錯,因爲先執行子查詢後id字段已經改爲i列名,外面的查詢已經拿不到id字段,所有報列名不匹配錯誤。

其實會犯這種錯誤,就是因爲不瞭解hive在執行hql時底層的job執行邏輯,仍然按照傳統的sql邏輯去思考問題,就會被問題困住。


這裏記錄下hive的order by ,sort by 的區別

order by 是對查詢後的結果進行全局排序,sort by 是對每個reduce的結果進行排序的。如果數據很大不建議order by因爲會引起內存不足。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章