Python Функция UDF в Redshift всегда возвращает значение NULL - PullRequest
1 голос
/ 08 января 2020

Я хочу иметь функцию в 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

Получение только нулевых значений. Город-колонна имеет тип Varchar. Почему я получаю нулевые значения и как я могу это решить?

1 Ответ

1 голос
/ 17 января 2020

Вам не нужно создавать Python функцию внутри UDF. Либо добавьте вызов функции, либо запишите его как скалярное выражение:

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;
...