我将运行查询,从Redshift返回一个巨大的表(大约700Mb)并使用我的本地机器上的SQLAlchemy和python 2.7将其保存为CSV(mac pro)。 我之前从未做过如此大规模的查询,显然可能存在一些记忆和其他问题。
我的问题是我将考虑什么以及如何使用sql炼金术来使这个过程有效?
谢谢, 亚历
答案 0 :(得分:3)
理想情况下,您可以使用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'
ref 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()
答案 1 :(得分:0)
如果你不在该机上运行其他许多东西,那么内存应该不是问题。试试看。在执行期间监视内存使用情况。也可以使用&#34; load&#34;看看系统有什么压力。