在Redshift中创建python UDF时出错

时间:2019-07-01 02:15:25

标签: python amazon-web-services amazon-redshift user-defined-functions

我正在尝试在Amazon Redshift中创建Python UDF,并且我已经成功创建了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 :(得分:0)

我设法使其正常工作。

我做了以下事情:

  • 通过您提供的链接下载了pyffx
  • 提取.tar.gz文件并创建.zip个文件
  • .zip文件复制到Amazon S3
  • 使用您的CREATE LIBRARY命令加载库
  • 创建函数

但是,当我使用该函数时,会收到错误消息:

  

无效操作:AttributeError:“模块”对象没有属性“ add_metaclass”

我的研究表明six库(提供Python 2和3兼容性)是此问题的根源。 Python Language Support for UDFs - Amazon Redshift页指示six 1.3已包含在Redshift中,而Pip six.add_metaclass error说此版本不包含add_metaclasssix的当前版本为1.12。

我试图在代码中包含更新的six库,但未成功。您也许比我更能挣扎。