我正在尝试在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
。
如果有人可以帮我解决这个问题,我会非常感激。
答案 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)。