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

Posted

技术标签:

【中文标题】如何使用 redshift 上的函数插入表格【英文标题】:how can I insert into table using a function on redshift 【发布时间】:2017-09-06 11:51:04 【问题描述】:

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

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

这是我正在使用的 python 代码(在 outside 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') 

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

【问题讨论】:

除了我在下面的回复之外-也许还有另一种方法可以解决这个问题,它可以在 redshift 中正常工作。请问您能描述一下您的要求吗?数据来自哪里?它会发生什么? 【参考方案1】:

没有办法做到这一点,因为 UDF 是用 Python 编写的,用于处理标量值、数组或对象,就像常规 Python 一样。您不能在 Redshift 中编写 SQL 函数。尽管对于过去在 Postgres 和其他支持存储过程的关系数据库中工作的人来说可能看起来很奇怪,但select insert_tab('a','b','d') 是一个 OLTP 环境的包装器,对分析数据库没有任何意义。

【讨论】:

当时确实如此,但现在 Redshift 支持过程。 docs.aws.amazon.com/redshift/latest/dg/…【参考方案2】:

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

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

【讨论】:

以上是关于如何使用 redshift 上的函数插入表格的主要内容,如果未能解决你的问题,请参考以下文章

如何通过插入和更新为 Redshift 表规划 diststyle

Amazon Redshift 大小增加

使用电子表格插入图片,如何使图片刚好填满整个单元格,而不是浮在上面

word 如何固定表格宽度,使插入的图片适应表格宽度?

如何在 Redshift 中打开/关闭 IDENTITY_INSERT

如何在 Amazon Redshift 中使用 Hibernate 插入实体