python - 在 Redshift 中创建 python UDF 时出错
问题描述
我正在尝试在 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;
解决方案
我设法让它工作......有点。
我做了以下事情:
- 通过您提供的链接下载 pyffx
- 提取
.tar.gz
文件并创建.zip
文件 - 将文件复制
.zip
到 Amazon S3 CREATE LIBRARY
使用您的命令加载库- 创建了函数
但是,当我使用该功能时,我收到错误:
无效操作:AttributeError:“模块”对象没有属性“add_metaclass”
我的研究表明该six
库(提供 Python 2 和 3 兼容性)是这个问题的根源。UDF的Python 语言支持 - Amazon Redshift页面表明它six 1.3
包含在 Redshift 中,但Pip Six.add_metaclass 错误表明此版本不包含add_metaclass
. 当前版本six
是 1.12。
我试图six
在代码中包含一个更新的库,但没有成功。你可能比我更能争吵。
推荐阅读
- python - 在执行逻辑回归时,我得到了错误:LinAlgError: Singular matrix
- shell - 如何让一个 Makefile 调用另一个 Makefile 规则?
- css - 如何管理旧的 CSS 类?
- ghostscript - imagick 执行 gs 命令失败
- shopify - shopify 中的联系人详细信息
- sql-server - 使用 SQL Server 2017 在图形中存储路线和位置
- ios - 如何在swift中将标签的文本保存为整数变量?
- php - while 中的条件语句,不起作用
- javascript - Javascript:在 HTML 浏览器上打印更新的 GPS 值在 1 秒间隔后的新行上
- python - 在自定义 TextGAN 中采样后无法计算 RNN 生成器的梯度