Вы используете язык сценариев. Дело в том, что буквально избежать ручного ввода каждой точки данных. Извини.
У вас есть два маршрута:
1: вы исправили загруженное соединение с базой данных и создали пустую таблицу в своей базе данных SQLite. Ницца!
Чтобы загрузить данные в таблицу, загрузите текстовый файл в R, используя, например. df <-
read.table('textfile.txt', sep='|')
(измените аргументы, чтобы они соответствовали вашему текстовому файлу).
Чтобы иметь «динамический» оператор INSERT, вы можете использовать заполнители. RSQLite позволяет использовать как именованный, так и позиционированный заполнитель. Чтобы вставить одну строку, вы можете сделать:
dbSendQuery(db, 'INSERT INTO table1 (MARKS, ROLLNUM, NAME) VALUES (?, ?, ?);', list(1, 16, 'Big fellow'))
Понимаете? Первый ?
получил значение 1
, второй ?
получил значение 16
, а последний ?
получил строку Big fellow
. Также обратите внимание, что вы не заключаете заполнители для текста в кавычки ('
или "
)!
Теперь у вас есть тысячи строк. Или просто больше одного. В любом случае, вы можете отправить свой фрейм данных. dbSendQuery
предъявляет некоторые требования. 1) Каждый вектор имеет одинаковое количество записей (не проблема при предоставлении data.frame). И 2) Вы можете только отправить столько векторов, сколько у вас есть заполнителей.
Я предполагаю, что ваш фрейм данных df
содержит столбцы mark
, roll
и name
, соответствующие столбцам. Затем вы можете запустить:
dbSendQuery(db, 'INSERT INTO table1 (MARKS, ROLLNUM, NAME) VALUES (:mark, :roll, :name);', df)
Это выполнит оператор INSERT для каждой строки в df
!
СОВЕТ! Поскольку инструкция INSERT выполняется для каждой строки, вставка тысяч строк может занять много времени, поскольку после каждой вставки данные записываются в файл, а индексы обновляются. . Вставьте, заключите его в транзакцию:
dbBegin(db)
res <- dbSendQuery(db, 'INSERT ...;', df)
dbClearResult(res)
dbCommit(db)
и SQLite сохранит данные в файл журнала и сохранит результат только при выполнении команды dbCommit(db)
. Попробуйте оба метода и сравните скорость!
2: А, да. Второй способ. Это можно сделать полностью в SQLite. С помощью командной утилиты SQLite (sqlite3
из вашей командной строки, а не R) вы можете прикрепить текстовый файл в виде таблицы и просто выполнить команду INSERT INTO ... SELECT ... ;
. В качестве альтернативы, прочитайте текстовый файл в sqlite3
во временную таблицу и запустите INSERT INTO ... SELECT ... ;
.
Полезный сайт для запоминания: http://www.sqlite.com/lang.html
person
MrGumble
schedule
20.09.2017