在impala/hive中使用字母顺序的连接拆分表

2guxujil  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(394)

我有以下几点 FNAMES 表(它包含大约58k条记录)

+------+-------------+
| ID   |   NICKNAMES |
+------+-------------+
|  1   |  Avile      |
|  2   |  Dudi       |
|  3   |  Moshiko    |
|  4   |  Avi        |
|  5   |  DAVE       |
....

我想按包含相同第一个lette的所有记录拆分表,如下所示:

+------+-------------+
| ID   |   NICKNAMES |
+------+-------------+
|  1   |  Avile      |
|  4   |  Avi        |

|  2   |  Dudi       |
|  5   |  DAVE       |

|  3   |  Moshiko    |
....

对于每一个分裂,我想找到记录与最小 Jaro–Winkler distance . 这意味着对于每一个以“a”开头的字母,我会找到最相似的记录。在下面的代码中我必须更改什么?

select FNAMES.*  ,  MIN(Jaro–Winkler(FNAMES.NICKNAMES, FNAMES.NICKNAMES))
from FNAMES
LEFT OUTER JOIN FNAMES
ON(true)
  WHERE Jaro–Winkler (FNAMES.NICKNAMES, FNAMES.NICKNAMES) <= 4
GROUP BY FNAMES.NICKNAMES
ttygqcqt

ttygqcqt1#

像这样的

select      f1.nicknames
           ,f2.nicknames

from       (select      f1.nicknames
                       ,f2.nicknames
                       ,rank () over
                        (
                            partition by    f1.nicknames
                            order by        jaro–winkler(f1.nicknames,f2.nicknames) desc
                        ) as rnk

            from                    fnames f1 

                        left join   fnames f2

                        on          substr(f1.nicknames,1,1) = 
                                    substr(f2.nicknames,1,1)

            where       f1.nicknames < f2.nicknames
            ) t

where       rnk = 1

相关问题