AWS Redshift 中嵌套游标的替代方案

Posted

技术标签:

【中文标题】AWS Redshift 中嵌套游标的替代方案【英文标题】:Alternative to nested cursor in AWS Redshift 【发布时间】:2019-08-23 12:47:16 【问题描述】:

我们如何在 aws redshift 中实现嵌套游标?我们可以使用 python 或 spark 来实现该功能吗? 欢迎任何其他替代方案。 我在 aws 产品支持页面上发现了不兼容性。 https://docs.aws.amazon.com/redshift/latest/dg/declare.html

【问题讨论】:

【参考方案1】:

目前 AWS Redshift 不支持在会话期间打开多个光标。请从他们的官方cursor declare 文档中找到以下引用:

您必须在事务块中声明游标。只有一个光标 一次可以在每个会话中打开。

替代方案:

几乎您唯一的选择是在您的应用程序层中实现此逻辑。设计某种使用本地主机资源来处理数据的python/脚本。您也可以将该流程卸载到 Redshift,但仍需要在应用层中设计该逻辑。

以下是如何使用 Python 从 Redshift 读取数据并对其进行循环的示例:

import psycopg2

#Create connection
con=psycopg2.connect(dbname= 'dbname', host='host', 
port= 'port', user= 'user', password= 'pwd')

cur = con.cursor() #Create a cursor from the connection

cur.execute("SELECT * FROM table_name;") #Run the select you want to loop/cursor over

for row in cur:
    #do something with every single row here
    #optionally print the row
    print row

#Clean up cursor and connection by closing
cur.close() 
conn.close()

【讨论】:

以上是关于AWS Redshift 中嵌套游标的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

AWS Quicksight,Redshift“引用嵌套表的子查询不能包含 WINDOW 操作”

RedShift / PostgreSQL 中串行类型的替代方案

Amazon Redshift 中 LISTAGG 函数的替代方法

aws Glue / Redshift 的预过滤解决方案(在加载到 S3 之前)

在 Redshift 中连接字符串的递归 CTE 替代方案

AWS Redshift:如何存储大小大于 100K 的文本字段