5

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

4

1 回答 1

7

Redshift基于Postgres 8.0,它非常老旧(不再受支持),因此这些年来它们已经发生了很大的分歧。Postgres的开发版本目前是 9.4,而 Postgres 的 8.x 和 9.x 版本9.0 及更高版本中有一些实质性的差异和补充。

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

通常我会说你最好的选择是定义一个自定义的PL/pgSQL函数来实现Levenshtein 距离算法,但根据Redshift 文档用户定义的函数和存储过程Redshift所做的Postgres的许多主要特性之一不支持,所以我认为你在这方面很不幸。

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

更新,2016-04-25

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

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

于 2014-10-28T01:49:12.760 回答