【问题标题】:Redshift: Any ways to compute fuzzy string similarity / string edit distance?Redshift:计算模糊字符串相似度/字符串编辑距离的任何方法?
【发布时间】:2014-12-23 06:16:11
【问题描述】:
【问题讨论】:
标签:
postgresql
amazon-redshift
edit-distance
【解决方案1】:
Redshift 基于 Postgres 8.0,该版本非常老旧(不再受支持),因此这些年来它们已经发生了很大的分歧。 Postgres 的开发版本目前是 9.4,Postgres 的 8.x 和 9.x 版本在 9.0 及更高版本中有一些实质性的差异和补充。
levenshtein 函数是您在上面链接的 fuzzystrmatch 模块的一部分,并且该模块是在 Postgres 8.3 中引入的,这可能是它没有为 Redshift (而且它显然还没有被添加)。
通常我会说你最好的选择是定义一个自定义 PL/pgSQL 函数来实现 Levenshtein Distance 算法,但根据Redshift doc,用户定义的函数和存储过程是Redshift不支持的Postgres的众多主要特性之一,所以我认为你很遗憾出局了在这方面运气好。
根据您的要求,您也许可以使用LIKE 来获得类似的结果。请参阅SO answer 了解更多信息(请注意,该答案中的一些替代建议,例如 全文 在 Redshift 中也不支持)。 p>
更新,2016 年 4 月 25 日
似乎自从我在 2014 年 10 月最初回答这个问题以来,已经添加了创建基于 Python 的User Defined Functions (UDFs) 的能力.这不如能够创建自定义 Postgres 函数内联(文档列出了 UDF 的各种警告),但应该允许 levenshtein distance 算法将在 Python 中实现并在 Redshift 查询的上下文中进行处理。
Hadoop 生态系统中使用的数据仓库项目
Apache Hive 中的
UDFs,允许以类似的方式使用用户定义的函数(基于Java 或 Python)。