我有一个表 (A) 包含一个短语,另一个表 (B) 是我想在表 A 的短语中查找的短语。所以我加入他们如下:
Create table C as
SELECT A.*
FROM A
JOIN B
where (A.phrase LIKE concat("%",B.phrase,"%"));
它花费了很长时间,因为它只使用一个 reducer ,我相信这与查询的性质有关?有没有办法加快速度?我不认为mapjoin或bucketjoin会有帮助,因为我没有将两列等同,而是在一个表中搜索另一个表中的单词...
请您参考如下方法:
我找到了解决方案。
问题在于 Hive 不能很好地执行非等值连接。因此,在执行非等连接正则表达式之前,我执行了等连接来获取表 A 的子集。因此,只需 3 个步骤。
- 将 A.phrase 和 B.phrase 分解为单独的单词。
- 对这些单词进行等同,以查看 B.phrase 中的哪些关键字与 A.phrase 中的任何关键字相同 - 这给出了表 A 的子集,其中 A.phrase 至少包含 B.phrase 中的一个关键字。
- 使用此表 A 子集查找整个“%B.phrase%”。


