我要運行查詢,從Redshift返回一個巨大的表(大約700Mb),並使用本地計算機上的SQLAlchemy和python 2.7將其保存爲CSV(mac pro)。 我從來沒有這樣做過這麼大的查詢之前,顯然可能有一些內存和其他問題。Python/SQLAlchemy:如何將巨大的紅移表保存爲CSV?
我的問題是我將考慮到以及如何使用sql鍊金術,以使該過程的工作?
謝謝, 亞歷克斯
我要運行查詢,從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