join表在hive中使用like或rlike

nue99wik  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(1544)

我正在尝试使用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应用程序)都值得赞赏。

5cnsuln7

5cnsuln71#

是的,“hive不支持非相等条件的连接条件,因为很难将此类条件表示为map/reduce作业。”我认为这意味着相等连接和自然连接(如第二个示例)。
我将研究在where子句中使用rlike条件进行交叉连接。根据数据的大小,您可能需要考虑对每个分区执行查询。
在pig中,您还可以执行交叉操作,然后根据您的条件进行过滤,类似于本文中的操作。

px9o7tmv

px9o7tmv2#

在这种特殊情况下,您可以轻松地用相等条件替换不相等条件:

a.col_x RLIKE concat('^', b.col_z)

与相同

substr(a.col_x,1,length(b.col_z))=b.col_z

相关问题