我有一个带有短语的表(A),另一个(B)是我要在表A的短语中找到的短语。所以我加入他们如下:
Create table C as
SELECT A.*
FROM A
JOIN B
where (A.phrase LIKE concat("%",B.phrase,"%"));
这需要很长时间,因为它只使用一个reducer,我相信这与查询的性质有关?有没有办法加速这个?我不认为mapjoin或bucketjoin会有所帮助,因为我不是在等两列,而是在一个表中搜索另一个表中的单词...
答案 0 :(得分:3)
我找到了解决方案。
问题是Hive没有做好 non equi join 。所以我做了 equi join 来获取表A的一个子集,然后我做了非equi join正则表达式。所以,3个步骤。
答案 1 :(得分:1)
我认为EXISTS
可能更快,因为您的查询会在每次匹配时多次从A
返回同一行:
SELECT
A.*
FROM A as a
WHERE EXISTS (
SELECT
1
FROM B
WHERE a.phrase LIKE concat("%",phrase,"%")
);