我想使用 Python 库在 Redshift 中创建 UDF 函数,特别是ua-parser库。
在 Redshift 上使用自定义 Python 库的过程在此处描述http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_LIBRARY.html
为了获得具有所有依赖项的库,我使用了 aws labs 的PipLibraryInstaller,它应该将所有依赖库放在 S3 上,与常规 pip 命令相同。
但是我不能让 ua-parser 库使用这个命令。
我使用以下命令创建并上传 lib 到 S3
./installPipModuleAsRedshiftLibrary.sh -m ua-parser -s s3://bucket_location -r region_name
然后我使用以下命令创建库
CREATE OR REPLACE LIBRARY ua_parser
LANGUAGE plpythonu
from 's3://bucket/ua-parser.zip'
WITH CREDENTIALS AS 'aws_access_key_id=AWS_key;aws_secret_access_key=secret_key'
region 'region_name'
然后我创建了函数:
create function f_user_agent_parse (user_agent varchar) returns varchar IMMUTABLE
as $$
from ua_parser import user_agent_parser as parser
parsed_string = parser.Parse(user_agent)
return type(parsed_string)
$$
language plpythonu;
当我尝试执行以下操作时:
select f_user_agent_parse('facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)') as s
我收到以下错误:
错误:XX000:ImportError:没有名为 _regexes 的模块。请查看 svl_udf_log 了解更多信息
看起来正则表达式不在库中。但是,当我从 S3 下载 lib 并查看它时,我看到以下文件:
这里有什么问题?我正在做一些事情或者图书馆有问题?