【问题标题】:Redshift: Any ways to compute fuzzy string similarity / string edit distance?Redshift:计算模糊字符串相似度/字符串编辑距离的任何方法?
【发布时间】:2014-12-23 06:16:11
【问题描述】:

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

【问题讨论】:

    标签: 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 月最初回答这个问题以来,已经添加了创建基于 PythonUser Defined Functions (UDFs) 的能力.这不如能够创建自定义 Postgres 函数内联(文档列出了 UDF 的各种警告),但应该允许 levenshtein distance 算法将在 Python 中实现并在 Redshift 查询的上下文中进行处理。

    Hadoop 生态系统中使用的数据仓库项目 Apache Hive 中的

    UDFs,允许以类似的方式使用用户定义的函数(基于JavaPython)。

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2012-07-25
      • 2016-11-21
      • 2015-03-01
      • 2017-02-28
      • 1970-01-01
      • 2013-02-24
      • 2011-04-04
      相关资源
      最近更新 更多