2017-11-14 12 views
0

ハイブの 'between'条件に基づいて2つのテーブルを結合することに問題があります。基本的に、Hiveはこれらの結合をサポートしていないため、回避する方法はわかりません。基本的には、t1.date < = t2.dateとt1.date> = t2.tdate2という日付列に基づいて2つのテーブルを結合したいと考えています。テーブル内の他の列は一致しません。どのように私はそれを達成することができますか?h条件の間にハイブ結合する

+0

の場合は、両方のテーブルから1つの共通キーが必要であり、このテーブルに参加してからこの条件を適用することができます。 –

答えて

0

私の意見では、まずフィルタリングを適用し、テーブルの1つを修正してから、結合を適用します。

select t.id, new.id from (select t1.id from temp t1, new_temp t2 where t1.id > t2.id)t join new_temp new on (t.id = new.id); 

これは動作するはずです。私は私の心に来たテストケースでテストしました。

次のようなアプローチが考えられますが、うまくいきません。

1.適用される場合加わると

select t1.id, t2.id from temp t1 join new_temp t2 on (t1.id = t2.id) where t1.id < t2.id 

=>このクエリはない行が出力に存在しますので、第1および結合条件を実行します。 あなたが実行することにより、実行フローを確認することができます。すでに適用されて参加して後にここで

select * from (select t1.id as t1id, t2.id as t2id from temp t1 join new_temp t2 on (t1.id = t2.id))new_table where t1id < t2id; 

に参加ところ

explain select t1.id, t2.id from temp t1 join new_temp t2 on (t1.id = t2.id) where t1.id < t2.id; 

2.適用、毎回のt1idとt2idは等しくなります。