我尝试将模块上传到通过S3进行红移,但它总是说找不到模块。请帮忙
CREATE or replace FUNCTION olus_layer(subs_no varchar)
RETURNS varchar volatile AS
$$
import plpydbapi
dbconn = plpydbapi.connect()
cursor = dbconn.cursor()
cursor.execute("SELECT count(*) from busobj_group.olus_usage_detail")
d=cursor.fetchall()
dbconn.close()
return d
$$
LANGUAGE plpythonu;
-
答案 0 :(得分:2)
您无法在Redshift中执行此操作。所以你需要找到另一种方法。
1)请参阅此处了解udf约束http://docs.aws.amazon.com/redshift/latest/dg/udf-constraints.html
2)见http://docs.aws.amazon.com/redshift/latest/dg/udf-python-language-support.html 特别是这部分:
重要Amazon Redshift会阻止所有网络访问和写访问 通过UDF到文件系统。
这意味着即使你试图绕过限制,它也不会起作用!
如果你不知道另一种方法来获得你需要的东西,你应该问一个新的问题,准确说明你的挑战是什么以及你尝试了什么,(留下这个问题和答案在这里以供其他人参考) )
答案 1 :(得分:1)
它无法连接到UDF内部的数据库,Python函数在Redshift中是标量,这意味着它需要一个或多个值并且只返回一个输出值。
但是,如果要对一组行执行函数,请尝试使用LISTAGG
函数将值或对象数组(如果需要多个属性)构建为一个大字符串(小心字符串大小)限制),将其作为参数传递给UDF并在函数内部解析/循环。
答案 2 :(得分:0)
Amazon最近宣布了对Redshift中存储过程的支持。与用户定义函数(UDF)不同,存储过程除SELECT查询外还可以合并数据定义语言(DDL)和数据操作语言(DML)。除此之外,它还支持循环和条件表达式,以控制逻辑流。
https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-overview.html