我正在尝试使用rlike(内部)连接hive中的两个表。
select a.col_x, b.col_y, count(*) as n
from tableA a
join tableB b
ON a.col_x RLIKE concat('^', b.col_z)
group by a.col_x, b.col_y
(表A)。100米记录,表B约。1k记录)
此查询将不起作用,因为配置单元仅支持相等联接。
我把不平等搬到 where
子句(参考:连接表时配置单元查询出错)。
select a.col_x, b.col_y, count(*) as n
from tableA a , tableB b
WHERE a.col_x RLIKE concat('^', b.col_z)
group by a.col_x, b.col_y
第二种方法不返回任何错误。但是,它运行得非常慢。运行大约1小时,但仍然无法获得输出(通常,当我使用equality join时 ON a.col_x RLIKE b.col_z
只需要不到5分钟)。
任何解决方案(使用hive或其他hadoop应用程序)都值得赞赏。
2条答案
按热度按时间5cnsuln71#
是的,“hive不支持非相等条件的连接条件,因为很难将此类条件表示为map/reduce作业。”我认为这意味着相等连接和自然连接(如第二个示例)。
我将研究在where子句中使用rlike条件进行交叉连接。根据数据的大小,您可能需要考虑对每个分区执行查询。
在pig中,您还可以执行交叉操作,然后根据您的条件进行过滤,类似于本文中的操作。
px9o7tmv2#
在这种特殊情况下,您可以轻松地用相等条件替换不相等条件:
与相同