Python/SQLAlchemy:如何将巨大的红移表保存到 CSV?
Posted
技术标签:
【中文标题】Python/SQLAlchemy:如何将巨大的红移表保存到 CSV?【英文标题】:Python/SQLAlchemy: How to save huge redshift table to CSV? 【发布时间】:2017-10-12 16:48:35 【问题描述】:我将运行从 Redshift 返回一个巨大表(约 700Mb)的查询,并在我的本地机器(mac pro)上使用 SQLAlchemy 和 python 2.7 将其保存到 CSV。 我以前从未使用过如此庞大的查询来完成此操作,显然可能存在一些内存和其他问题。
我的问题是我应该考虑什么以及如何使用 sql alchemy 来使流程正常工作?
谢谢, 亚历克斯
【问题讨论】:
您是否尝试以任何方式更改转储的数据? 【参考方案1】:理想情况下,您会使用 UNLOAD 命令将其移至 S3 存储,然后将其带到您的本地计算机。这是一个例子:
UNLOAD ('select * from my_table')
TO 's3://bucket_name/path/to/my_filename_prefix'
WITH CREDENTIALS
'aws_access_key_id=<my_access_key>;
aws_secret_access_key=<my_secret_key>'
MANIFEST
GZIP
ALLOWOVERWRITE
ESCAPE
NULL AS '\\N'
参考http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html
如果本地查询是唯一或首选的选项,这里有两件事可以限制内存使用:
最小化操作
一次循环一个查询的结果
如果对您的数据进行了编辑,以下是一个示例 sn-p:
result = conn.execute(s)
row = result.fetchone()
with open(outfile, 'ab') as csvfile:
while row is not None:
csvfile.write(txt)
row = result.fetchone()
否则只写所有行:
# dump column titles (optional)
csvfile.writerow(x[0] for x in cursor.description)
# dump rows
csvfile.writerows(cursor.fetchall())
outfile.close()
sn-p 信用:https://***.com/a/2952829/7853322
【讨论】:
【参考方案2】:如果您在那台机器上没有运行太多其他东西,那么内存应该不是问题。试试看。在执行期间监视内存使用情况。也可以使用“负载”来查看系统的压力。
【讨论】:
以上是关于Python/SQLAlchemy:如何将巨大的红移表保存到 CSV?的主要内容,如果未能解决你的问题,请参考以下文章