HIVE中的左外连接导致错误

时间:2017-08-14 14:10:38

标签: sql database hive left-join

我正在尝试在Hive中的2个表上执行左外连接。此处的连接条件涉及LIKE运算符。这是我试图执行的查询:

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")

当我执行此查询时,出现错误

  

在JOIN''%''

中遇到左右别名

此处的目的是在给定条件下对表a和b执行左外连接,即基于设备名称和time_stamp

如果有人可以帮我解决这个问题,我会非常感激。

1 个答案:

答案 0 :(得分:0)

like条件不支持

join。解决此问题的一种方法是在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")

但是这种方法存在的问题是,join转换为inner join,因为您正在过滤右表(在本例中为b)。