如何使用redshift上的函数插入表中

时间:2017-09-06 11:51:05

标签: python amazon-redshift user-defined-functions psycopg2

我正在尝试创建一个简单的函数,它获取3个参数并将它们插入到表中(作为一行)。 现在我知道redshift不支持过程,但启用了python函数。

我有一个python函数,当在redshift外部运行时,可以完成工作。 我是如何在redhsift中实现的,所以当我从查询中调用函数时它会执行相同的操作?

这是我正在使用的python代码(在外部 redshift下工作正常):

import psycopg2

def insert_tab(arg1, arg2, arg3):
# Create connection to redshift
try:
    con = psycopg2.connect("dbname= 'dev' 
    host='something.redshift.amazonaws.com' "
                            "port= '5439' user= 'user' password= 'password'")
    con.autocommit = True
    cur = con.cursor()
except:
    print("Cannot connect to Database")

sql_statementy= "insert into table(a,b,c) values (%s, %s, %s)"
try:
    cur.execute(sql_statementy, (arg1, arg2, arg3))
except:
    print("insert into failed")
return

我用

运行python
import write_table
write_table.insert_tab('a','b','c')

如何在redshift上实现此功能,以便我可以像

一样调用该函数
select insert_tab('a','b','d') 

所以它会像程序一样工作吗?

2 个答案:

答案 0 :(得分:0)

没有办法做到这一点,因为UDF是用Python编写的,用于处理标量值,数组或对象,就像普通的Python一样。您无法在Redshift中编写SQL函数。虽然对于曾经在Postgres和支持存储过程的其他关系数据库中工作的人来说似乎很奇怪,但select insert_tab('a','b','d')是OLTP环境的包装器,对分析数据库没有任何意义。

答案 1 :(得分:0)

您实际上可以在python或sql中编写UDF (截至上周) 见http://docs.aws.amazon.com/redshift/latest/dg/user-defined-functions.html

但是存在某些限制,包括他们无法读取或写入。 事实上,他们所能做的只是返回一个值。