我有两张table,其中一张大约有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)?
1条答案
按热度按时间bnl4lu3b1#
Hive
表的性能取决于不同的点。查询工程师
文件格式
使用矢量化
set hive.vectorized.execution.enabled = true;set hive.vectorized.execution.reduce.enabled = true;
如果你有好的服务器,你可以试试Impala
而且肯定比Hive
.您可以对
impala
这将使您能够更快地执行此查询