无交叉连接的不同表模糊匹配(Snowflake)

Fuzzy Matching in Different Tables with No Cross Join(Snowflake)

有两个tableA和B。

它们都包含引用同一事物的标题,但命名约定总是不同且无法预测。

匹配标题的唯一方法是在多个列上找到较低的差异分数,但目前只有标题很重要。

目前每个 table 中只有大约 10,000 条记录。使用标准的 Cross Join 和 EditDistance 组合现在工作正常。但我已经注意到性能会随着记录数量的增加而下降。

是否有更高效的方法来实现在不同 table 中的字符串之间找到部分匹配的预期结果?

如果有明显的答案,我深表歉意。少数偏离 editdistance 解决方案的帖子仍然假定交叉连接:https://community.snowflake.com/s/question/0D50Z00008zPLLxSAO/join-with-partial-string-match

您应该使用阻塞键策略来帮助减少生成的对数。本文档解释了 Snowflake 上的模糊匹配策略和其他技术。 https://drive.google.com/file/d/1FuxZnXojx71t-1kNOaqg1ErrEiiATdsM/view?usp=sharing

根据 Ryan 的观点,避免比较所有值的方法是删减“加入了哪些值”。

在其他领域(空间)中,我们发现将 GPS 向下量化,然后加入周围的 8 个桶,同时为了“对人类可以在附近看到的事物进行更多比较”消除了对“明显”事物的所有比较很远。

就像最昂贵的计算一样,您希望尽可能多地修剪而不遗漏要包含的内容。也就是说假阳性还好,假阴性就很糟糕了。

所以你如何batch/bucket/prune你的数据是非常具体的应用程序数据。