Hive partition prune的一個Bug
昨天跑了一個Hive查詢發現啟動的MAP數遠遠多於預期,很奇怪;查詢可以簡單抽象如下:
比如有一個表t的分割槽鍵dt string;查詢select count(*) from t where dt=20130926;
是哪裡出了問題呢?首先看一下執行計劃果然發現問題了:
首先出現了:
expr: (dt = 2.0130926E7)
type: boolean
其次partition values是dt 和__HIVE_DEFAULT_PARTITION__
應該發生了類似隱式轉換的事情吧?修改成dt=’20130926’再看正確了.
因為隱式轉換而無法使用索引的情況在RDBMS比較常見,但是這個如果是隱式轉換也說不通,因為只是多掃描了一個分割槽而不是全部分割槽,帶著這樣的疑問看原始碼:得到的結論就是Hive的分割槽鍵列和值都必須是String型別,如果不是就可能會Hit到bug 4878(pruneBySequentialScan),不知道為什麼CDH4.2沒有merge這個patch.
Update:這個Bug已經在Hive 0.12被fixed掉了
本文轉自MIKE老畢 51CTO部落格,原文連結:http://blog.51cto.com/boylook/1302073,如需轉載請自行聯絡原作者
相關文章
- oracle的一個bugOracle
- TestHome 的一個 Bug
- Snakeyaml的一個bugYAML
- 一個奇怪的 Bug
- Hive的一個面試題Hive面試題
- [BUG反饋]AdminController類的一個小bugController
- hive-3.0.0 版本中遇到的bug 彙總Hive
- 發現Mapstruct的一個bugStruct
- 一個排序引發的BUG排序
- 10g sqlplus的一個bugSQL
- SpringBoot讀取yml的一個bugSpring Boot
- onethink安裝時的一個bug
- 一個與CONNECT BY相關的BUG
- 遭遇ORA-07445 的一個BUG
- 找到Intel手冊裡的一個bugIntel
- NDK clang編譯器的一個bug編譯
- 發現 ORM 方法 MorphToMany 的一個 BugORM
- java log4j 的一個bugJava
- 碰到一個latch free相關的BUG
- 一個價值8.7億刀的bug
- 一個bug造就的經典遊戲....遊戲
- 一個系統BUG引發的血案 -- FKDownloader
- 我好像發現了一個Go的Bug?Go
- 這不會又是一個Go的BUG吧?Go
- iOS layoutMargins 的坑:一個活久見的 bugiOS
- 我們被一個 kong 的效能 bug 折騰了一個通宵
- Partition Pruning和Partition-Wise Joins
- 【Hive一】Hive安裝及配置Hive
- 記錄一個前端bug的解決過程前端
- 一個由public關鍵字引發的bug
- 一個bug肝一週...忍不住提了issue
- Clique Partition
- 一個bug引發的Android分割槽儲存的思考Android
- prune 命令用來刪除不再使用的 docker 物件。Docker物件
- 遇到ASM的兩個BUGASM
- 記php-fpm重啟導致的一個bugPHP
- 從一個跨二十年的glibc bug說起
- 發現了一個關於 gin 1.3.0 框架的 bug框架
- free batches of packets in tcp_prune_ofo_queue()BATTCP