我有两个表,一个包含大约17K(NLIST
)个记录,而另一个包含57K(FNAMES
)。
我想通过使用levenshtein公式比较记录来加入两者。
以下是表格内容的示例:
表NLIST
:
+------+-------------+
| ID | S_NAME |
+------+-------------+
| 1 | Avi |
| 2 | Moshe |
| 3 | David |
....
表FNAMES
:
+------+-------------+
| ID | NICKNAMES |
+------+-------------+
| 1 | Avile |
| 2 | Dudi |
| 3 | Moshiko |
| 4 | Avi |
| 5 | DAVE |
....
以上表格仅为示例。在实际情况中,名称列可以包含多个单词。
所需的结果应为:
+------+-------------+--------+
| ID | NICKNAMES | S_NAME |
+------+-------------+--------+
| 1 | Avile | Avi |
| 2 | Dudi | David |
| 3 | Moshiko | Moshe |
| 4 | Avi | Avi |
| 5 | DAVE | David |
...
以下是我使用的代码:
select FNAMES.NICKNAMES, NLIST.S_NAME
from NICKNAMES
LEFT OUTER JOIN NLIST
ON(true)
WHERE levenshtein (FNAMES.NICKNAMES, NLIST.S_NAME) <=4
上面的代码运行了很长时间,我停止了它的运行。
如何让它在合理的时间内运行?
此外,我认为levenshtein
距离取决于单词的长度。如何找到距离的最佳值(在这种情况下,我任意选择4个)?
答案 0 :(得分:-2)
Hive
表的表现取决于各点。
set hive.vectorized.execution.enabled = true;set hive.vectorized.execution.reduce.enabled = true;
如果您有良好的服务器,可以尝试Impala
,但肯定比Hive
更快。
您可以对impala
进行微调,这样可以更快地执行此查询。Tuning Impala for Performance