Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Импорт файла в базу данных через sqlite3 / 15 сообщений из 15, страница 1 из 1
14.12.2018, 20:59
    #39748177
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:11
    #39748184
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelКак ускорить это мероприятие?
Глянь сюда https://www.sql.ru/forum/1302777/baza-3-mln-shtrihkodov
3 млн. за несколько секунд.
...
Рейтинг: 0 / 0
14.12.2018, 21:53
    #39748206
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelЗа 7 часов работы этого скрипта было импортировано. 1,205 млн записей.
Как ускорить это мероприятие?
sqlite3 dbfile ".import <TextFile> <Table>"
...
Рейтинг: 0 / 0
14.12.2018, 22:10
    #39748219
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
White Owl,
А в определенный столбец разве так можно вставлять?
...
Рейтинг: 0 / 0
14.12.2018, 23:06
    #39748237
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
White Owl,

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


Не работает? Просто моргает, а ничего не вставляет?
Я делаю просто: достаю данные в файл csv из таблицы в бд, чищу таблицу и пытаюсь экспортированные данные из csv засунуть обратно - ничего не происходит.
...
Рейтинг: 0 / 0
14.12.2018, 23:19
    #39748248
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
White Owl,
А если делать так:
Экспортирую в 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
15.12.2018, 00:10
    #39748275
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
...
Рейтинг: 0 / 0
15.12.2018, 00:36
    #39748284
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelWhite Owl,

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


Не работает? Просто моргает, а ничего не вставляет?
Я делаю просто: достаю данные в файл csv из таблицы в бд, чищу таблицу и пытаюсь экспортированные данные из csv засунуть обратно - ничего не происходит.Это не работает, потому что две команды с точкой одновременно дать нельзя.
И оно не моргает, а ругается.
...
Рейтинг: 0 / 0
15.12.2018, 00:37
    #39748285
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelWhite Owl,
А если делать так:
Экспортирую в csv через
Код: plsql
1.
sqlite3 -csv $db_file "select * from words;" > $tmp_file


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

А кто будет говорить что импорт тоже будет из csv?
...
Рейтинг: 0 / 0
15.12.2018, 06:15
    #39748302
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
В начало скрипта добавь
Код: sql
1.
2.
3.
pragma read_uncommitted=ON;
pragma synhronous=OFF;
pragma journal_mode=OFF;


И делай копию базы перед запуском скрипта.

PS Эти прагмы ускоряют, но в случае сбоя компа во время изменения базы - база может поломаться.
...
Рейтинг: 0 / 0
15.12.2018, 06:15
    #39748303
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
White Owl,

И как тогда сказать ему об этом, что тоже формата csv? Глядя на справку "-csv" это ключ для для экспорта.


На счёт импорта файла csv/txt - выдаёт одну и ту же ошибку про несовместимость типов данных. Но почему? Я ж только что достал из бд эти данные.
...
Рейтинг: 0 / 0
15.12.2018, 17:29
    #39748419
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelWhite Owl,

И как тогда сказать ему об этом, что тоже формата csv? Глядя на справку "-csv" это ключ для для экспорта.А экспериментировать тебе религия запрещает?

BlackeAngelНа счёт импорта файла csv/txt - выдаёт одну и ту же ошибку про несовместимость типов данных. Но почему? Я ж только что достал из бд эти данные.Ну может все-же покажешь ddl своей таблицы?
...
Рейтинг: 0 / 0
15.12.2018, 22:19
    #39748480
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
White Owl,
На счёт религии - не пробовал, но почитал хелп.

Вот бд
...
Рейтинг: 0 / 0
16.12.2018, 02:09
    #39748546
Karbafos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
BlackeAngelWhite Owl,
На счёт религии - не пробовал, но почитал хелп.

Вот бд

2 минуты в гугле

Код: sql
1.
2.
3.
4.
sqlite3 $db_file <<END_COMMANDS
.mode csv
.import $tmp_file users
END_COMMANDS



Код: sql
1.
printf ".mode csv\n.import $tmp_file users\n" | sqlite3 $db_file
...
Рейтинг: 0 / 0
16.12.2018, 15:25
    #39748607
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт файла в базу данных через sqlite3
Karbafos,

А вот то что вот так параметры можно подавать - не знал. Спасибо! Вроде работает.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Импорт файла в базу данных через sqlite3 / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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