2

我正在使用 Python 2.6,我想从名为“user_data”的表中读取来自 Redshift 的数据并使用 psycopg2 写入文件。我在“光标”中获取记录,并以这种方式尝试写入文件:

fout = open('user_data', 'w')
cursor.copy_to(fout,"user_data", sep='|')

当我执行此操作时,它会引发以下错误:

psycopg2.ProgrammingError: syntax error at or near "stdout"
LINE 1: COPY user_data TO stdout WITH DELIMITER AS

它想表达什么??这个有什么解决办法??

4

1 回答 1

2

不幸COPY TO STDOUT的是,Amazon Redshift 不支持。您可以通过 2 种方式完成任务。第一个是按照@kadalamittai 的建议做(迭代光标并在python中写入文件),第二个是使用UNLOAD命令。在处理大量数据时,我会推荐后者。

UNLOAD使您能够以 CSV 文件格式将查询结果直接输出到 Amazon S3。例子:

UNLOAD ('select * from users where last_seen_dt>\'2016-11-10\'')
TO 's3://object-path/name-prefix'

有关UNLOAD命令的更多信息在这里

然后,您可以使用boto从 S3 下载文件:

import boto3
s3 = boto3.resource('s3')
s3_client = boto3.client('s3')

s3_client.download_file('QueryResultsBucket', 'remote_query_results.csv', 'query_results.csv')
print(open('query_results.csv').read())
于 2016-11-22T08:37:29.673 回答