首页 > 解决方案 > SQL Optimize 中的 NGram 查询

问题描述

我正在 Teradata TD16 中编写 SQL 查询。我正在尝试通过 NGrams 匹配两个连接的字符串(即 trigrams - 3 个字符的 NGrams)。刺之间必须至少有 1 个三元组。不幸的是,我能想到的唯一方法是通过交叉连接和匹配 NGram 函数。有没有一种资源消耗较少的方法来做到这一点。

SEL
a.Row_id AS Mstr_Row_Id
,b.Row_id AS Chk_Row_Id
,EditDistance(a.Concant_Addr_Ln_Pc,b.Concant_Addr_Ln_Pc) AS Edit_Distance
,Char_Length(Trim( Both From a.Concant_Addr_Ln_Pc)) AS Char_Len_Test_Addr
,(1.00 * (Char_Len_Test_Addr - Edit_Distance) / NullIfZero(Char_Len_Test_Addr)) *100.00 AS Prcnt

FROM ( SEL * FROM  VT_Addr_Master WHERE grp=1 AND Coalesce(Reliable_Score_1,0)< 100 ) AS a
CROSS JOIN VT_Addr_Check AS b
ON  Ngram(a.N_Gram_Smpl,b.N_Gram_Smpl,3)>0

QUALIFY Row_Number() Over(
PARTITION BY a.Row_id
ORDER BY Prcnt DESC)=1

标签: sqlteradatan-gram

解决方案


推荐阅读