Redshift 中的 Python UDF 函数始终返回 NULL 值

Posted

技术标签:

【中文标题】Redshift 中的 Python UDF 函数始终返回 NULL 值【英文标题】:Python UDF function in Redshift always return NULL value 【发布时间】:2020-01-08 10:56:50 【问题描述】:

我想在 Redshift 中有一个功能可以去除单词中的重音。我在 SO(question) 中发现了一个问题,其中包含用于制作它的 Python 代码。我尝试了一些解决方案,其中之一是:

import unicodedata
def remove_accents(accented_string):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])

然后我在 Redshift 中创建函数如下:

create function remove_accents(accented_string varchar)
returns varchar
immutable
as $$
import unicodedata
def remove_accents(accented_string):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
$$ language plpythonu;

我将它应用到一个列:

SELECT remove_accents(city) FROM info_geo

只获取空值。列 city 是 varchar 类型。为什么我得到空值,我该如何解决?

【问题讨论】:

【参考方案1】:

您无需在 UDF 中创建 Python 函数。添加函数调用或将其编写为标量表达式:

create function remove_accents(accented_string varchar)
returns varchar
immutable
as $$
  import unicodedata
  nfkd_form = unicodedata.normalize('NFKD', accented_string)
  return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
$$ language plpythonu;

【讨论】:

以上是关于Redshift 中的 Python UDF 函数始终返回 NULL 值的主要内容,如果未能解决你的问题,请参考以下文章

在 Redshift 中使用 python UDF 中的表

您可以从 Redshift 中的 python UDF 返回多个值吗?

使用自定义 Python 库 ua-parser 的 Amazon Redshift UDF

如何避免 Redshift Python UDF 出现 UnicodeDecodeError ascii 错误?

Redshift - 使用 Python UDF 从 JSON 中提取根密钥

将列表/数组作为参数/返回类型传递并返回给 Redshift 中的 UDF