如何在 python udf 中使用 select 查询进行红移?
how to use select query inside a python udf for redshift?
我尝试通过 S3 将模块上传到 redshift,但它总是说找不到模块。请帮忙
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;
–
您不能在 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
特别是这部分:
Important Amazon Redshift blocks all network access and write access
to the file system through UDFs.
这意味着即使你试图绕过限制,它也不会奏效!
如果您不知道获得所需内容的替代方法,您应该提出一个新问题,具体说明您面临的挑战是什么以及您尝试过什么,(在此处留下这个问题和答案以供其他人将来参考)
它无法连接到 UDF 内部的数据库,Python 函数在 Redshift 中是标量,这意味着它需要一个或多个值并且 returns 只有一个输出值。
但是,如果您想对一组行执行一个函数,请尝试使用 LISTAGG
函数将值或对象数组(如果您需要多个属性)构建成一个大字符串(注意字符串大小限制),将其作为参数传递给 UDF,并在函数内部 parse/loop。
Amazon 最近宣布支持 Redshift 中的存储过程。与 user-defined 函数 (UDF) 不同,除了 SELECT 查询之外,存储过程还可以包含数据定义语言 (DDL) 和数据操作语言 (DML)。除此之外,它还支持循环和条件表达式,以控制逻辑流。
https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-overview.html
我尝试通过 S3 将模块上传到 redshift,但它总是说找不到模块。请帮忙
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;
–
您不能在 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 特别是这部分:
Important Amazon Redshift blocks all network access and write access to the file system through UDFs.
这意味着即使你试图绕过限制,它也不会奏效!
如果您不知道获得所需内容的替代方法,您应该提出一个新问题,具体说明您面临的挑战是什么以及您尝试过什么,(在此处留下这个问题和答案以供其他人将来参考)
它无法连接到 UDF 内部的数据库,Python 函数在 Redshift 中是标量,这意味着它需要一个或多个值并且 returns 只有一个输出值。
但是,如果您想对一组行执行一个函数,请尝试使用 LISTAGG
函数将值或对象数组(如果您需要多个属性)构建成一个大字符串(注意字符串大小限制),将其作为参数传递给 UDF,并在函数内部 parse/loop。
Amazon 最近宣布支持 Redshift 中的存储过程。与 user-defined 函数 (UDF) 不同,除了 SELECT 查询之外,存储过程还可以包含数据定义语言 (DDL) 和数据操作语言 (DML)。除此之外,它还支持循环和条件表达式,以控制逻辑流。
https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-overview.html