2017-12-08 5 views
0

ちょうど同じ内容の2つのハイブテーブルt1とt2を持っています。以下に示すように、2つのカラム 'a'と 'b' 9行。maxのエイリアスである列のハイブクエリjoinは結果なし

1 a 
2 b 
3 c 
4 d 
5 e 
6 f 
7 g 
8 h 
9 i 

問題は、以下のhive_QLは何も得ないということである

select 
    t2_t.a, 
    t2_t.m 
from 
    (select 
     a, 
     max(b) as m 
    from 
     t1 
    group by 
     a 
    ) t1_t 
join 
    (select 
     a, 
     max(b) as m 
    from 
     t2 
    group by 
     a 
    ) t2_t 
on 
    t1_t.m=t2_t.m 

が、私は '*' に

t2_t.a, 
t2_t.m 

を変更した場合、hive_QLだけで通常通り動作しますが、出力は以下のようになります、

1 a 1 a 
2 b 2 b 
3 c 3 c 
4 d 4 d 
5 e 5 e 
6 f 6 f 
7 g 7 g 
8 h 8 h 
9 i 9 i 

マイハイブクライアントのバージョンは1.2.1、 ですので、ご理解ください。

+0

m列は何が含まれていないを参照してください? –

+0

@KaushikNayakカラムmはサブクエリt1_tのmax(b)のエイリアスです。 – MHX

+0

このクエリに間違いはありません。私はcloudera VMでそれを試して、あなたのクエリは結果を返します。あなたはハイブの別のインスタンスでそれを試しましたか? – Ramesh

答えて

0

IdentityProjectRemover最適化がHiveクエリの演算子ツリーに適用され、FIL演算子の上にあるSEL演算子が誤って削除されると問題が発生します。

SELオペレータが、入力タプルから列を削除していました。その結果、クエリは不正な結果を返します。

この問題を解決するには、set hive.optimize.remove.identity.project=falseを使用してオプティマイザをオフにします。

詳細については、このハイブ問題HIVE-10996

関連する問題