ビールはキリン党のにいやんです。こんばんわ。
一番搾りが好きですが、プリン体がラガーの方が少ないと聞き、ラガーに浮気しようかと・・・
さてさて、先日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でも早めにバグが修正されるとよいですね。