2017-08-14 2 views
0

Hiveの2つのテーブルに対して左外部結合を実行しようとしています。ここでの結合条件には、LIKE演算子が含まれます。これは私が実行しようとしているクエリです:HIVEの左外部結合によりエラーが発生しました

SELECT * 
FROM a 
LEFT OUTER JOIN 
    (SELECT * 
    FROM b 
    WHERE class = 'ex') ON b.mo LIKE CONCAT(a.device_name ,'%') 
         AND a.time_stamp BETWEEN to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) - 660), "z") 
              AND to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) + 60),"z") 

私はこのクエリを実行すると、私は両方とも左と右の別名がで発生したエラー

「「」%」を登録しよ取得します

ここでは、指定された条件、つまりデバイス名とtime_stampに基づいてテーブルaとbに対して左外部結合を実行することを目的としています。

誰かがこれで私を助けることができたら、私は本当にそれを感謝します。

答えて

0

likeは、joinの条件ではサポートされていません。これを回避する方法の1つは、where句に条件を指定することです。このアプローチの

SELECT * --better specify columns needed instead of * 
FROM a 
LEFT OUTER JOIN (SELECT * from b WHERE class = 'ex') b ON 1=1 
WHERE b.mo LIKE CONCAT(a.device_name ,'%') 
AND a.time_stamp 
BETWEEN to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) - 660),"z") 
AND to_utc_timestamp(from_unixtime(cast(b.first_time AS BIGINT) + 60),"z") 

しかし、問題は、あなたが(この場合b)の右側のテーブルをフィルタリングしているようjoininner joinになり、です。

+0

したがって、LIKE条件で左外部結合を実行する方法はありませんか? – codecracker

+0

いいえ、私が知っている限り..内部結合でも 'like'を使うことはできません。 –

+0

ああ!迅速な答えをありがとう! – codecracker

関連する問題