CDH5.4 Hiveでのカラムずれ問題
ビールはキリン党のにいやんです。こんばんわ。
一番搾りが好きですが、プリン体がラガーの方が少ないと聞き、ラガーに浮気しようかと・・・
さてさて、先日CDH5.4のアップデート方法を書いて、特に問題なかったぜ!って思ったのですが。 後から大問題が確認されました。。。
なんとHiveのバグを思いっきり踏んでいたらしく、selectした際のカラムずれが起きてました...orz
バグは以下のチケットにあがっています。
[HIVE-9613] Left join query plan outputs wrong column when using subquery - ASF JIRA
どのようなバグかざっくりいうと、
「left outer joinを繰り返すと、select したのと違うカラムが表示される場合がある」
という、なんとも悲惨なバグです。
すでにチケットはクローズされ、Hive1.2では修正されているようなのですが、CDH5.4.2ではbackportされていないようで、バグが出てしまうようです。
回避策としてはleft outer join をする度に別名をつけると回避できるようです。
バグが出るSQL(バグのチケットより抜粋)
select a.category, a.city, a.rank, b.src_category_en, c.src_city_name_en from hivetemp.category_city_rank a left outer join (select src_category_en, dst_category_en from hivetemp.category_match) b on a.category = b.dst_category_en left outer join (select src_city_name_en, dst_city_name_en from hivetemp.city_match) c on a.city = c.dst_city_name_en
以下のように修正することで回避
select aa.category, aa.city, aa.rank, aa.src_category_en, c.src_city_name_en from ( select a.category, a.city, a.rank, b.src_category_en from hivetemp.category_city_rank a left outer join (select src_category_en, dst_category_en from hivetemp.category_match) b on a.category = b.dst_category_en ) aa left outer join (select src_city_name_en, dst_city_name_en from hivetemp.city_match) c on aa.city = c.dst_city_name_en
CDHでも早めにバグが修正されるとよいですね。