Python/SQLAlchemy:如何将巨大的红移表保存为CSV?
问题描述:
我要运行查询,从Redshift返回一个巨大的表(大约700Mb),并使用本地计算机上的SQLAlchemy和python 2.7将其保存为CSV(mac pro)。 我从来没有这样做过这么大的查询之前,显然可能有一些内存和其他问题。Python/SQLAlchemy:如何将巨大的红移表保存为CSV?
我的问题是我将考虑到以及如何使用sql炼金术,以使该过程的工作?
谢谢, 亚历克斯
答
理想情况下,您可以使用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
如果本地查询的唯一或最佳的选择,这里有两件事情要限制使用内存:
最大限度地降低运营
一次循环查询一个结果
下面是一个例子片断,如果编辑都做你的数据:
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()
答
如果没有这台机器上运行的其他东西那么内存不应该是一个问题。试一试。在执行期间监视内存使用情况。也可以使用“加载”来查看系统上的压力。
你是不是想改变数据以任何方式倾倒? – brddawg