Гость
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Импорт файла в базу данных через sqlite3 / 12 сообщений из 12, страница 1 из 1
14.12.2018, 21:06
    #39748181
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
Всем привет. Нужно загрузить текстовый файл в базу данных кол-во строк 4млн, вес файла 58 мб.
Написал вот такой код
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
db_file="./user_dict.db"
dict_lang="ru"
dict_file="./russian2.txt"
tmp_file="./tmp.csv"
temp_txt="./tmp.txt"
#экспорт из словаря в файл вместе со столбцами
#sqlite3 -header -csv $db_file "select * from words;" > /sdcard/out.csv
#экспорт из словаря в файл только слов
echo "Получаем данные из словаря..."
sqlite3 -csv $db_file "select [word] from words;" > $tmp_file
#удаляем кавычки 
sed -i "s/\"//g" $tmp_file
#очищаем таблицу
sqlite3 $db_file "delete from words;"
#соединяем файлы в один
echo "Объединяем словари..."
cat $dict_file >> $tmp_file
#сортируем и удаляем дубли
cat $tmp_file | sort -u > $temp_txt
rm -rf $tmp_file
#записываем в базу
echo "Заполняем таблицу базы данных, ожидайте..."
i=1
cat $temp_txt | while read a
do
    sqlite3 $db_file "INSERT INTO words (_id,word,frequency,locale,appid,shortcut) VALUES ('$i','$a','1','$dict_lang','0','');"
    let "i=i+1"
done
rm -rf $temp_txt
echo "Готово!"


За 7 часов работы этого скрипта было импортировано. 1,205 млн записей.
Как ускорить это мероприятие?
...
Рейтинг: 0 / 0
14.12.2018, 21:17
    #39748190
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngel
Код: powershell
1.
sqlite3 $db_file "INSERT

На каждую запись вызывать отдельную команду??? Жуть какая... Неужели сложить инсерты в файл нельзя было?
Уж если CSV Import не годится по какой-то причине.
...
Рейтинг: 0 / 0
14.12.2018, 21:23
    #39748192
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
miksoft,
Вот этот момент я и не понял как реализовать в командной строке. Может поясните на пальцах?
...
Рейтинг: 0 / 0
14.12.2018, 23:05
    #39748235
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
miksoft,

Почему тогда это
Код: plsql
1.
sqlite3 $db_file ".mode csv .import $temp_txt words"


Не работает? Просто моргает, а ничего не вставляет?
Я делаю просто: достаю данные в файл csv из таблицы в бд, чищу таблицу и пытаюсь экспортированные данные из csv засунуть обратно - ничего не происходит.
...
Рейтинг: 0 / 0
14.12.2018, 23:18
    #39748247
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
miksoft,

А если делать так:
Экспортирую в csv через
Код: plsql
1.
sqlite3 -csv $db_file "select * from words;" > $tmp_file


А затем не трогая его очищаю таблицу, и импортирую файл csv который только что эксортировал вот так
Код: plsql
1.
sqlite3 $db_file ".import $tmp_file words"


То ругается ошибками
Код: powershell
1.
2.
3.
./tmp.csv:25191: INSERT failed: datatype mismatch
./tmp.csv:25192: expected 6 columns but found 1 - fill
ing the rest with NULL


как сделать нормально?
...
Рейтинг: 0 / 0
14.12.2018, 23:55
    #39748264
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelдостаю данные в файл csv из таблицы в бд, чищу таблицу и пытаюсь экспортированные данные из csv засунуть обратноА зачем вообще это все? Почему нельзя прямо в БД данные обработать? Она же и предназначена для этого.
...
Рейтинг: 0 / 0
15.12.2018, 01:38
    #39748293
Karbafos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelкак сделать нормально?

засунуть тексты ошибок в гугловский переводчик, если непонятно, что написано
...
Рейтинг: 0 / 0
15.12.2018, 06:05
    #39748299
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
miksoftBlackeAngelдостаю данные в файл csv из таблицы в бд, чищу таблицу и пытаюсь экспортированные данные из csv засунуть обратноА зачем вообще это все? Почему нельзя прямо в БД данные обработать? Она же и предназначена для этого.
Для того что б не придумать файл для импорта.
...
Рейтинг: 0 / 0
15.12.2018, 06:06
    #39748301
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
KarbafosBlackeAngelкак сделать нормально?

засунуть тексты ошибок в гугловский переводчик, если непонятно, что написано
Остряк, как погляжу. Это сделал в первую очередь.
...
Рейтинг: 0 / 0
15.12.2018, 14:26
    #39748381
Karbafos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelKarbafosпропущено...


засунуть тексты ошибок в гугловский переводчик, если непонятно, что написано
Остряк, как погляжу. Это сделал в первую очередь.
и какие выводы после перевода? почему не совпадает количество колонок в базе и в csv?
...
Рейтинг: 0 / 0
15.12.2018, 15:33
    #39748397
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngel,
Потому,что если много обновлений ,то для sqlite,\
Надо дать команду
Код: plsql
1.
2.
3.
BEGIN TRANSACTION
Потом обновления
Потом Commit


И всё это будет очень быстро.
.
Иначе(Без этих команд) на каждую операцию обновления sqlite пишет в журнал.
(По этому вопросу в форум sqlite надо было).
...
Рейтинг: 0 / 0
15.12.2018, 16:04
    #39748402
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngel,
жестоко, есть же пакетная вставка, тынц , но там вроде ограничение есть на длину пакета, миллионы разбить на пакеты, будет имхо быстрей
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Импорт файла в базу данных через sqlite3 / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]