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?的主要内容,如果未能解决你的问题,请参考以下文章

Python SQLAlchemy入门教程

Python SQLAlchemy 模块

python4 sqlalchemy模块学习

python SQLAlchemy

Python Sqlalchemy

如何分析 SQLAlchemy 支持的应用程序?