如何在python udf中使用select查询进行redshift?

时间:2017-11-03 05:29:07

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

我尝试将模块上传到通过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;

-

3 个答案:

答案 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