繁体   English   中英

Python / SQLAlchemy:如何将巨大的redshift表保存为CSV?

[英]Python/SQLAlchemy: How to save huge redshift table to CSV?

我将运行查询,该查询从Redshift返回一个巨大的表(大约700Mb),并使用SQLAlchemy和python 2.7在我的本地计算机(mac pro)上将其保存为CSV。 我以前从未进行过如此庞大的查询,显然可能存在一些内存和其他问题。

我的问题是我应该考虑什么,以及如何使用sql alchemy才能使该过程正常运行?

谢谢,亚历克斯

理想情况下,您将使用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

如果本地查询是唯一或首选的选项,则有两件事限制了内存的使用:

  1. 减少操作

  2. 一次遍历查询结果

如果对数据进行了编辑,这是一个示例片段:

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()

片段信用: https : //stackoverflow.com/a/2952829/7853322

如果您在该计算机上没有执行其他操作,那么内存应该不是问题。 试试看。 在执行期间监视内存使用情况。 也可以使用“负载”来查看系统承受的压力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM