Redshift:有什么方法可以计算模糊字符串相似度/字符串编辑距离?

gat*_*ado 5 postgresql edit-distance amazon-redshift

在 PSQL(我相信 Redshift 基于它)中,有像levenshtein/ levenshtein_less_equal[ http://www.postgresql.org/docs/9.1/static/fuzzystrmatch.html ]这样的字符串相似度函数。这些功能似乎没有进入 Redshift [ http://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html ]。我错了,还是有人提出了创造性的查询来解决此限制?

kha*_*son 6

Redshift基于Postgres 8.0,它非常古老(不再受支持),因此多年来它们发生了很大的不同。开发版本的Postgres目前是9.4,和8.x和9.x版本的Postgres在9.0和一些重大分歧和补充。

levenshtein函数是fuzzystrmatch您在上面链接的模块的一部分,并且该模块是在Postgres 8.3中引入的,这可能是它没有被Redshift淘汰的原因(而且它显然没有被添加)。

通常情况下,我会说你最好的选择是定义一个定制的PL / pgSQL的功能,实现Levenshtein距离算法,但根据红移文档用户定义的函数和存储过程是的许多重要功能之一的Postgres红移做不支持,所以我认为你不幸在这方面不走运。

根据您的要求,您也许可以使用LIKE来达到类似的结果。有关更多信息,请参阅此SO 答案(请注意,该答案中的一些替代建议,例如Redshift也不支持全文)。

更新,2016-04-25

似乎自从我最初在 2014 年 10 月回答这个问题以来,已经添加了创建基于Python用户定义函数( UDF ) 的功能。这不像能够内联创建自定义Postgres函数那样理想(该文档列出了UDF的各种警告),但应该允许在Python 中实现levenshtein 距离算法并在Redshift查询的上下文中进行处理.

Apache Hive 中的UDF是一个在Hadoop生态系统中使用的数据仓库项目,允许以类似的方式(基于JavaPython)使用用户定义的函数。