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