我有一个具有以下结构的表
------------------------------------
|Company_ID| Company_Name| Join_Key|
------------------------------------
| 1 | ACompany | AC |
| 2 | BCompany | BC |
虽然这个表没有很多列,但有大约400万行。
我想计算这些公司名称的一些字符串距离计算。我有以下查询
select a.Company_Name as Name1,
b.Company_Name as Name2,
Fuzzy_Match(a.Company_Name, b.Company_Name, 'JaccardDistance') as Jaccard --this is a custom function
from [Companies] a, [Companies] b
虽然这样的东西适用于较小的数据库,但由于我的数据库太大,我无法在合理的时间内完成所有组合。所以我想到了用窗口函数对数据库进行分区。
select Company_Name,
ROW_NUMBER() over(partition by Join_Key order by Join_Key asc) as row_num
Join_Key
from [Companies]
这给了我一个按其join_key编号和分区的公司列表,但我不确定的是如何做这两件事。
如何执行交叉连接并计算每个分区的字符串相似性度量,以便我只比较那些具有“AC'作为他们的连接键?