从非常大的表中导出逗号分隔的数据
Posted
技术标签:
【中文标题】从非常大的表中导出逗号分隔的数据【英文标题】:Exporting comma delimited data from a very large table 【发布时间】:2013-11-25 09:51:51 【问题描述】:我正在尝试从具有大约 1300 万个条目的远程主机的一个非常大的表中获取所有数据到一个文本文件中。我尝试了以下命令,但一段时间后进程被杀死并显示一条名为“Killed”的消息。在控制台中。 mysql --user=username --password -h host -e "select * from db.table_name" >> output_file.txt
我的主要目标是将数据从 mysql 复制到 redshift,我这样做是通过使用“,”分隔的文本文件获取所有数据,然后将其上传到 s3 并在 redshift 上执行 COPY
查询。
P.S 对于小表,上述命令可以正常工作,但不适用于大表。
【问题讨论】:
【参考方案1】:你可以试试mysqldump。如果我没记错的话,它可以参数化为输出 CSV。我自己没有尝试过,所以您可能想查看文档,但这应该可以:
mysqldump --user=username --password -h host \
--fields-terminated-by="," --fields-enclosed-by="\"" --lines-terminated-by="\n" \
dbname tablename > output_file.txt
如果这不起作用,您可以尝试 SELECT INTO OUTFILE。您需要像这样直接在 MySQL 主机上执行此操作:
SELECT * INTO OUTFILE '/tmp/data.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\' LINES TERMINATED BY '\n'
FROM db.table_name
【讨论】:
如果您可以提供导出到 csv 文件的第一个选项的命令将非常有帮助。我无法访问数据库以外的文件,所以第二个选项不会有太大帮助。以上是关于从非常大的表中导出逗号分隔的数据的主要内容,如果未能解决你的问题,请参考以下文章