Меня попросили нагрузить 7 миллионов CSV файлов в таблицу. Поэтому я написал этот скрипт, который я использовал для подобных запросов
cd /datafiles
for f in $(find /datafiles -type f); do
echo $f
mysql -h <myhost> -u <myuser> --password=<myuserpassword <mydb> -e "LOAD DATA LOCAL INFILE '${f}' INTO TABLE <mytable> ignore 1 lines"
done
Я использовал этот скрипт для загрузки до 31 файла, то есть один день в месяц. Не более того.
CSV с разделителями по трубе (6 полей) - это в основном данные кликов. В среднем количество записей в файле составляет около 50 записей, но оно может достигать 7000 и меньше 1.
Размер файлов составляет от 50 до 800 Кбайт. На моем сервере выделено 64 ГБ памяти.
Поскольку DBA отказывается предоставить мне объединить все файлы в один файл слияния (что-то делать с использованием кэша db), у меня нет выбора.
Будут ли я сталкиваться с проблемами памяти? Мой сервер находится в Google Cloud. Каковы возможные проблемы, связанные с этим?
Когда я закончил, я переместил файл в папку "done". И остановитесь при любой ошибке. Что-то вроде:
#!/bin/bash -e
cd datafiles
mkdir ../done
for f in $(find . -type f); do
echo $f
mysql -h <myhost> -u <myuser> --password=<myuserpassword <mydb> -e "LOAD DATA LOCAL INFILE '${f}' INTO TABLE <mytable> ignore 1 lines"
mv $f ../done/
done
cd ..