Hive partition prune的一個Bug

來源:互聯網
上載者:User

昨天跑了一個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.


本文出自 “MIKE老畢的部落格” 部落格,請務必保留此出處http://boylook.blog.51cto.com/7934327/1302073

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.