Предполагая MySQL в RDS, альтернативой является использование пакетного режима, который выводит значения, разделенные TAB, и экранирует символы новой строки, табуляции и другие специальные символы.Я еще не использовал инструмент импорта CSV, который не может обрабатывать данные, разделенные табуляцией.Так, например:
$ mysql -h myhost.rds.amazonaws.com -u user -D my_database -p --batch --quick -e "SELECT * FROM my_table" > output.csv
Как отмечалось в Halfgaar выше, опция --quick
мгновенно сбрасывается, что позволяет избежать ошибок нехватки памяти для больших таблиц.Чтобы заключить строки в кавычки (рекомендуется), вам нужно проделать дополнительную работу в вашем запросе:
SELECT id, CONCAT('"', REPLACE(text_column, '"', '""'), '"'), float_column
FROM my_table
* REPLACE
экранирует все символы двойной кавычки в значениях text_column
.Я бы также предложил использовать строки iso8601 для полей даты и времени, поэтому:
SELECT CONCAT('"', DATE_FORMAT(datetime_column, '%Y%m%dT%T'), '"') FROM my_table
Имейте в виду, что CONCAT возвращает NULL, если у вас есть значение столбца NULL.
Я запускал это на некоторых довольно больших таблицах с разумной производительностью.600M строк и 23ГБ данных заняли ~ 30 минут при выполнении команды mysql в том же VPC, что и экземпляр RDS.