当sqlalchemy

时间:2016-01-15 17:02:59

标签: python amazon-s3 sqlalchemy psycopg2 amazon-redshift

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

SQLAlchemy是否会关闭花费太长时间的查询?有没有办法设置或延长查询超时?脚本本身就像没有出现任何问题一样继续,并且Redshift日志也没有表明问题,但是当查询被标记为Terminated时,它通常意味着外部已经杀死了该进程。

2 个答案:

答案 0 :(得分:0)

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

  1. 在工作负载管理器控制台中,您可以选择为每个队列指定超时。

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

答案 1 :(得分:0)

事实证明,sqlalchemy比AWS / Redshift更具问题。

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

解决方案是使用“commit transaction;”

完成连接或每个事务
conn = engine.connect()
conn.execute("""SELECT .... """)
conn.execute("""COMMIT TRANSACTION""")