Redshift unload在由sqlalchemy调用时终止

2024-06-01 22:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用SQLAlchemy从python脚本运行几个从Redshift到S3的大型卸载查询。(以及sqlalchemy redshift包) 前一对可以工作,但最后一个运行longs(约30分钟)的命令在Redshift查询仪表板中标记为终止。一些数据被加载到S3,但我怀疑它不是全部。 我相当有信心查询本身是可以工作的,因为我过去曾用它在本地下载过。在

SQLAlchemy是否会关闭耗时过长的查询?有没有办法设置或延长查询超时?脚本本身继续运行,好像什么都没出问题,红移日志也不表示有问题,但当查询被标记为终止时,通常意味着外部的某些东西终止了进程。在


Tags: 数据标记命令脚本redshifts3sqlalchemy仪表板
2条回答

事实证明,这更像是sqlalchemy的问题,而不是AWS/Redshift。在

SQLAlchemy不会隐式地“提交事务”,因此,如果在未提交事务仍处于打开状态时关闭连接(即使查询本身似乎已完成),则该连接内的所有事务都将标记为已终止。

解决方案是用“committransaction;”完成连接或每个事务

conn = engine.connect()
conn.execute("""SELECT .... """)
conn.execute("""COMMIT TRANSACTION""")

您可以在两个地方控制Redshift中的超时:

  1. 在WorkloadManager控制台中,可以选择为每个队列指定超时。

  2. ODBC/JDBC驱动程序设置。根据下面链接中的步骤更新注册表, http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-firewall-guidance.html

相关问题 更多 >