Redshift:任何计算模糊字符串相似度/字符串编辑距离的方法?

时间:2014-10-27 22:55:04

标签: postgresql amazon-redshift edit-distance

在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]。我错了,还是有人提出创造性的查询来解决这个限制?

1 个答案:

答案 0 :(得分:4)

Redshift 基于 Postgres 8.0,这是非常古老的(并且不再受支持),所以这些年来它们已大大分化。 Postgres 的开发版本目前为9.4,而 Postgres 的8.x和9.x版本在9.0及更高版本中有一些实质性差异和增加。

levenshtein函数是您在上面链接的fuzzystrmatch模块的一部分,该模块是在 Postgres 8.3 中引入的,这可能是它没有制作的原因 Redshift 的剪辑(显然还没有添加)。

通常我会说你最好的办法是定义一个自定义 PL / pgSQL 函数来实现 Levenshtein距离算法,但根据Redshift doc用户定义的函数和存储过程 Postgres 的许多主要功能之一 Redshift 不支持,所以我认为你是不幸的是,在那方面运气不好。

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

更新,2016-04-25

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

Apache Hive 中的 UDF Hadoop 生态系统中使用的数据仓库项目,以类似的方式允许用户定义的功能( Java Python )。