Ошибка при создании Python UDF в Redshift - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь создать Python UDF в Amazon Redshift, и я успешно создал UDF без ошибок.Я также успешно создал необходимую библиотеку для этого UDF.Но когда я выполняю UDF, я получаю ошибку:

Нет модуля с именем pyffx.Пожалуйста, посмотрите svl_udf_log для получения дополнительной информации

Я скачал библиотеку из pypi.org и загрузил ее в Amazon S3.Это ссылка, которую я использовал для загрузки библиотеки:

https://pypi.org/project/pyffx/#files

create library pyffx
language plpythonu
from 's3://aws-bucket/tmp/python_module/pyffx-0.3.0.zip'
credentials
'aws_iam_role=iam role'
region 'us-east-1';

CREATE OR REPLACE FUNCTION schema.ffx(src VARCHAR)
RETURNS VARCHAR
STABLE
AS $$
    import pyffx
    src = unicode(src)
    value=(src)
    l=len(value)
    e = pyffx.String(b'secret-key', alphabet='abcedefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', length=l)
    return e.encrypt(value)
$$ LANGUAGE plpythonu;

1 Ответ

0 голосов
/ 01 июля 2019

Мне удалось заставить его работать ... вроде.

Я сделал следующее:

  • Скачал pyffx по предоставленной вами ссылке
  • Извлеченофайл .tar.gz и создание .zip файлов
  • Копирование файла .zip в Amazon S3
  • Загрузка библиотеки с помощью команды CREATE LIBRARY
  • Создана функция

Однако, когда я использую функцию, я получаю сообщение об ошибке:

Недопустимая операция: AttributeError: «У модуля« У объекта нет атрибута »add_metaclass '

Мои исследования показывают, что источником этой проблемы является библиотека six (обеспечивающая совместимость с Python 2 и 3).Страница Python Language UDF - Amazon Redshift указывает, что * Red32 * включен в Redshift, но Pip six.add_metaclass error говорит, что эта версия не включает add_metaclass.Текущая версия six - 1.12.

Я попытался включить обновленную библиотеку six в код, но безуспешно.Вы могли бы поспорить лучше, чем я.

...