У меня действительно большой csv ~ 260 ГБ, и я хочу импортировать его в MySQL. Я использую следующий сценарий mysql в MacOS
УДАЛИТЬ ТАБЛИЦУ ЕСЛИ СУЩЕСТВУЕТ tmp_catpath_5;
создать таблицу tmp_catpath_5 (a1 BIGINT (20), a2 BIGINT (20), a3 BIGINT (20), a4 BIGINT (20), a5 BIGINT (20), c1 BIGINT (20), c2 BIGINT (20), c3 BIGINT (20) ), c4 BIGINT (20), c5 BIGINT (20), INDEX (a5));
загрузить данные в локальный файл infile '/ Volumes / Time Machine Backups 1 / tmp_catpath_5.csv' в таблицу tmp_catpath_5 ПОЛЕЙ, ЗАКОНЧЕННЫЕ ',' ЗАКРЫТО '' '' СТРОКИ, ЗАКРЫТО '\ n';
Он работает для небольших файлов, например. 150 ГБ, но для этого размера база данных исчезает сразу после команды загрузки
ОШИБКА 1049 (42000): Неизвестная база данных
Есть ли ограничение на размер MySQL? Это что-то еще? Я использую MySQL из приложения MAMP (LAMP для MacOS), может ли оно отличаться от официального приложения MySQL?
Я не знаю, есть ли ограничения для конкретных движков БД, но я встречался с некоторыми администраторами Министерства обороны, которые управляют системой MySQL, которая импортирует 10 ТБ каждый день, и у них не возникает такой проблемы.
Вместо того, чтобы использовать макросы, я рекомендую написать сценарий для анализа входного файла и создания из него операторов вставки, которые можно передать прямо в MySQL. Таким образом, вы не будете обрабатывать весь файл за один раз, а будете обрабатывать только одну строку за раз. Мне нравится использовать Perl для таких вещей.
Вы также можете рассмотреть возможность использования усечения вместо того, чтобы отбрасывать таблицу и создавать ее каждый раз заново.
Хотя это на самом деле не отвечает на ваш вопрос, вы рассматривали возможность разделения файла на более мелкие части? Утилита unix "split" легко справится с этим.
Когда вы говорите «сбои», вы имеете в виду клиент MySQL или сервер? Отображается какая-нибудь ошибка?